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

所以我正在这样做:

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计算机。

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

最佳答案

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

在.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();
}

关于c# - 列出“桌面”文件夹中的所有内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14572041/

10-10 13:33
查看更多