我目前正在使用以下Get Path in a ListBox of all Open Explorer Windows:
foreach (SHDocVw.InternetExplorer j in new SHDocVw.ShellWindows()) {
if (j.Name == "Windows Explorer") {
ListView1.Items.Add(j.LocationURL);
}
}
但是它不会返回特殊文件夹的位置,如计算机,回收站,网络等。有没有办法识别这些文件夹,所以我可以像shell:MyComputerFolder
那样为我自己设置路径? / p>
答案 0 :(得分:3)
您需要使用Environment.GetFolderPath(Environment.SpecialFolder) method
Environment.SpecialFolder是一个枚举,其中包含所有Windows“特殊”文件夹的值(例如,我的文档,程序文件,桌面)
<强>更新强> 您可以使用此方法来判断给定路径是否是特殊文件夹:
public static bool IsSpecialFolder(string folderPath)
{
foreach (Environment.SpecialFolder specialFolderType in Enum.GetValues(typeof (Environment.SpecialFolder)))
{
var specialFolderLocation = Environment.GetFolderPath(specialFolderType);
if(specialFolderLocation.Equals(folderPath, StringComparison.InvariantCultureIgnoreCase))
return true;
}
return false;
}
例如,您可以为每个IsSpecialFolder(j.LocationURL)
调用j
,以找出哪些打开的文件夹是特殊文件夹。
答案 1 :(得分:1)
如果j.LocationName
为null
,我会将其与当前系统文件夹的名称Get Current Names of Windows Special Folders进行比较,然后手动添加路径,如shell:MyComputerFolder
答案 2 :(得分:0)
可以像这样使用Environment.SpecialFolder枚举
Environment.GetFolderPath(Environment.SpecialFolder.System))
在链接中,顺便提一下具体的代码示例。
答案 3 :(得分:0)
我需要获取路径...但它不会返回特殊文件夹的位置,如计算机,回收站,网络等。
如果窗口的位置不是物理目录,那么您遇到的直接问题是LocationURL
会返回""
。对于“我的电脑”,“回收站”和“网络”,这并不奇怪 - 这些是虚拟文件夹; 不是可以指向它们的路径或URL,因为它们不是磁盘上的位置。
但是,如果您导航到“Documents”( 对应于磁盘上的目录,即使它也是一个特殊文件夹),LocationURL
仍会返回""
。在这里它可以给你一条路径,但它选择不这样做。这似乎有点意味着它。
我找到了一些说明ShellWindows返回InternetExplorer
objects的文档。我找不到您正在使用的ShellBrowserWindow
课程的任何文档,但InternetExplorer
似乎相似或相同,因此您可以参考一些documentation而不是仅仅需要查看Intellisense中的属性名称。
唯一看起来有用的其他属性是LocationName
,即使对于虚拟或特殊文件夹也会返回一些内容。但是,它返回一个像“Documents”或“Libraries”这样的字符串,这不是你可以真正以编程方式使用的东西(它在不同的语言环境,不同的Windows版本等中会有所不同)。
如果您需要的只是列表中显示的内容,LocationName
可能就足够了。如果你真的需要这条路径,那么你可能会运气不好(不过你会反正,因为如上所述,计算机,回收站和网络之类的东西没有路径)。