我试图拉出打开的资源管理器窗口中列出的文件和目录列表(与显示的顺序相同),以便我可以查看它,然后将焦点设置到特定项目。
我找到了这段代码here https://stackoverflow.com/questions/14193388/how-to-get-windows-explorers-selected-files-from-within-c这让我能够得到selected项目,但是我不确定是否可以使用这种方法来获取all items:
List<string> SelectedFiles() {
string filename;
List<string> selected = new List<string>();
var shell = new Shell32.Shell();
foreach (SHDocVw.InternetExplorer window in new SHDocVw.ShellWindows()) {
filename = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
if (filename.ToLowerInvariant() == "explorer") {
((Shell32.IShellFolderViewDual2)window.Document).SelectItem()
foreach (Shell32.FolderItem item in items) {
selected.Add(item.Path);
}
}
}
return selected;
}
看起来这个 Shell32 方法还允许我以编程方式选择一个项目,这是我试图完成的另一部分。代替SelectedItems()
,我会打电话SelectItem()
,虽然我不确定如何使用该功能。
任何人都知道从打开的 Windows 资源管理器窗口获取文件/目录列表的方法(最好将焦点设置到某个项目)?也许是 P/Invoke 之类的东西?
我能够修改我发现的代码片段,以列出所有文件/目录,而不仅仅是选定的文件/目录。
这就是我最终得到的结果:
List<string> FilesAndFolders() {
string filename;
List<string> explorerItems = new List<string>();
var shell = new Shell32.Shell();
foreach (SHDocVw.InternetExplorer window in new SHDocVw.ShellWindows()) {
filename = Path.GetFileNameWithoutExtension(window.FullName).ToLower();
if (filename.ToLowerInvariant() == "explorer") {
Shell32.Folder folder = ((Shell32.IShellFolderViewDual2)window.Document).Folder;
Shell32.FolderItems items = folder.Items();
foreach (Shell32.FolderItem item in items) {
explorerItems.Add(item.Path);
}
}
}
return explorerItems;
}
Edit:
要选择一个项目,您可以调用:
((Shell32.IShellFolderViewDual2)window.Document).SelectItem(item, 1);
where window
is a SHDocVw.InternetExplorer
, and item
is a Shell32.FolderItem
(from folder.Items()
在上面的例子中)。
要取消选择,请传入0
代替1
作为第二次过载。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)