列出桌面文件夹中的所有内容

本文关键字:桌面 桌面文件 文件夹 | 更新日期: 2023-09-27 17:56:19

所以事情是这样的...我正在制作一个小应用程序,它应该能够列出用户桌面上的所有内容 - 包括快捷方式。

所以我这样做:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            DirectoryInfo d = new DirectoryInfo(filepath);
            foreach (var file in d.GetFiles())
            {
                Console.WriteLine(file.Name);
            }

这给了我以下内容:

 Spotify.lnk  
 Desktop.ini

但是在我的桌面上,我可以看到这些:

Spotify.lnk
Desktop.ini
Microsoft Office 2010
VLC Media Player

所以我试图从中提取一些WMI信息:Win32_ShortcutFile没有任何运气。(它列出了我在桌面上没有的东西,比如Windows Live。

所以此刻我有点无知...

我希望这有任何意义!

任何指向正确方向的指针都会很棒!

干杯。

编辑:我忘了提到 - 目标节点是Windows Server 2008 SP1机器。

编辑:我也忘了提到我已经在检查桌面上的文件夹。

列出桌面文件夹中的所有内容

您需要检查公共用户的桌面。

在 .Net 4.0 及更高版本中,可以使用Environment.SpecialFolder.CommonDesktopDirectory特殊文件夹获取该目录。

在您的机器上,如果您没有更改它,则可能C:'Users'Public'Desktop。 如果您查看那里,您应该会看到C:'Users'YourUserName'Desktop文件夹中缺少的文件。

如果您使用的是 .net 3.5 或更低版本,则特殊文件夹枚举中不存在该CommonDesktopDirectory。 如果是这种情况,则需要使用 Win32 API 调用来获取文件夹路径。

[DllImport("shfolder.dll", CharSet = CharSet.Auto)]
private static extern int SHGetFolderPath(IntPtr hwndOwner, int nFolder, IntPtr hToken, int dwFlags, StringBuilder lpszPath);
private const int MAX_PATH = 260;
private const int CSIDL_COMMON_DESKTOPDIRECTORY = 0x0019;
public static string GetAllUsersDesktopFolderPath()
{
    StringBuilder sbPath = new StringBuilder(MAX_PATH);
    SHGetFolderPath(IntPtr.Zero, CSIDL_COMMON_DESKTOPDIRECTORY, IntPtr.Zero, 0, sbPath);
    return sbPath.ToString();
}

您还需要扫描此目录:

string filepath = Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory);

如果你想得到所有停止项目,你必须检查DesktopDirectoryCommonDesktopDirectory

    var list = new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory)).GetFiles()
       .Concat(new DirectoryInfo(Environment.GetFolderPath(Environment.SpecialFolder.CommonDesktopDirectory)).GetFiles())
       .Distinct();
    foreach (var file in list)
    {
        Console.WriteLine(file.Name);
    }

虽然许多项目来自所有用户桌面,但正如其他答案中所解释的那样,这绝不是完成您的搜索。

如果要使用与 Windows 对桌面项目相同的列表,则需要对生成的对象调用SHGetDesktopFolder并调用EnumObjects。 我不认为 .NET 基类库公开了此功能,但我确信有人已经编写了一个包装器来完成所有繁重的工作。 在 pinvoke.net 中已经提供了一个精简包装器(转换为 C# 的接口声明)

当您查看(但不编码)时,某些文件可能会显示,因为它们实际上位于共享桌面文件夹中。 在 Windows 7 上,这是 C:'Users'Public'Public Desktop . 在XP上,我认为C:'Documents and Settings'All Users'Desktop,但我现在无法检查。