我必须编辑使用vb.net语言在visual studio中编写的加载项。我需要的是一种从活动的Windows资源管理器窗口获取所有当前选定文件的列表的方法,以便我可以将其传递给程序中的另一个函数。我在视觉工作室并不是很有经验(我的大多数经验都是使用VB 6.0的VBA)所以我在寻找一些建议之前我花了太多时间走错路。
我在考虑使用Windows Shell对象。我发现了一些用C ++编写的例子,我花了一些时间阅读MSDN,但在此之前我投入了大量时间,我想与更多经验丰富的VB.Net/VS用户联系。我知道.Net有很多用于处理system.io命名空间下的文件/文件夹对象的内置选项,但我还没有找到任何可以让我看到资源管理器窗口中当前所选项目的内容。
我只是想知道.Net中是否存在可以满足我需要的东西? 如果没有,使用Windows Shell对象是最好的方法吗?
答案 0 :(得分:2)
这只是对this answer的一个小修改。而不是像链接的答案那样处理焦点项目,而是从<VirtualHost *:8081>
ServerName server-xyz
RailsEnv test
DocumentRoot /webapps/test/app2/current/public
<Directory />
Options FollowSymLinks Indexes
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
获取所选项目。 ShellFolderView
不会对你有好处,因为文件/文件夹相关的类与文件系统有关 - 文件不知道资源管理器是否选择了它们。
首先,添加对System.IO
和Microsoft Shell Controls and Automation
的引用(请参阅上面的链接)。
Microsoft Internet Controls
用法(点击按钮):
Imports Shell32
Imports SHDocVw
Private Function GetExplorerSelectedFiles() As String()
Dim ExplorerFiles As New List(Of String)
Dim exShell As New Shell
For Each window As ShellBrowserWindow In DirectCast(exShell.Windows, IShellWindows)
' check both for either interface to work
' add an Exit for to just work the first explorer window
If TryCast(window.Document, IShellFolderViewDual) IsNot Nothing Then
For Each fi As FolderItem In DirectCast(window.Document, IShellFolderViewDual).SelectedItems
ExplorerFiles.Add(fi.Path)
Next
ElseIf TryCast(window.Document, ShellFolderView) IsNot Nothing Then
For Each fi As FolderItem In DirectCast(window.Document, ShellFolderView).SelectedItems
ExplorerFiles.Add(fi.Path)
Next
End If
Next
Return ExplorerFiles.ToArray
End Function
已修改为适用于Dim files = GetExplorerSelectedFiles()
lbFiles.Items.AddRange(files)
或IShellFolderViewDual