在资源管理器窗口中获取所选文件

时间:2010-03-25 18:17:58

标签: winapi windows-explorer

我想知道如果可能的话,如何在打开的Windows资源管理器窗口中获取所选文件的路径。如果没有,至少可以获得打开的Windows资源管理器窗口的文件夹路径吗?

我这样做的最终原因是我正在编写的软件工具需要用户选择文件。我想如果他们已经使用Windows资源管理器移动文件然后启动我的工具,那么最好不要让它们在文件打开对话框中再次导航到该文件夹​​。然后我的软件可以识别它是否有正确的文件扩展名,如果是,只需询问用户是否要导入该文件。

1 个答案:

答案 0 :(得分:1)

所以经过一些更有创意的Google搜索后,我发现了一个使用ShDocVW.dll的ShellWindows类的方法

在VB / A中,引用设置为ShDocVW.dll(Microsoft Internet Controls),这里是我用来获取所有打开的资源管理器窗口中所有选定文件名的集合的代码:

Function GetSelectedFilesInWinExplorers() As Collection
    Dim Result As New Collection
    Dim ExpWin As Object
    Set ExpWin = New SHDocVw.ShellWindows
    Dim CurrWin As SHDocVw.InternetExplorer
    On Error Resume Next
    Dim CurrSelFile As String
    For Each CurrWin In ExpWin
        If Not CurrWin.Document Is Nothing Then
            If Not CurrWin.Document.FocusedItem Is Nothing Then
                CurrSelFile = CurrWin.Document.FocusedItem.Path
                If CurrSelFile <> "" Then
                    Result.Add CurrSelFile
                    Debug.Print CurrSelFile
                End If
                CurrSelFile = ""
            End If
        End If
    Next CurrWin
    Set GetSelectedFilesInWinExplorers = Result
End Function

我不得不使用On Error Resume Next,因为出于某种原因,FocusedItem不会是什么,但仍然会引发错误。那并且我并不真正关心在这种情况下使用它。