所以这就是...
我正在制作一个小型应用程序,该应用程序应该能够在用户桌面上列出所有内容-包括快捷方式。
所以我正在这样做:
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/