2010-03-25 5 views
1

Je voudrais savoir comment, si possible, obtenir le chemin du fichier sélectionné dans une fenêtre ouverte de Windows Explorer. Sinon, serait-il au moins possible d'obtenir le chemin du dossier d'une fenêtre Windows Explorer ouverte?Récupère le fichier sélectionné dans une fenêtre de l'Explorateur

La raison pour laquelle je suis en train de faire cela, est un outil logiciel que j'écris nécessite un utilisateur pour sélectionner un fichier. Je me dis que s'ils déplacent déjà le fichier avec Windows Explorer et démarrent mon outil, il serait bon de ne pas les obliger à revenir dans le dossier dans la boîte de dialogue d'ouverture de fichier. Mon logiciel serait alors capable d'identifier s'il a la bonne extension de fichier et si oui, demandez à l'utilisateur s'il veut importer ce fichier.

+0

Je pense que Raymond Chen a répondu exactement à votre question avec cet article de blog: http://blogs.msdn.com/oldnewthing/archive/2004/07/20/188696.aspx C'est un code plutôt impressionnant, mais comme il dit : "Ce n'est pas une tâche intrinsèquement difficile, il suffit de rassembler beaucoup de petites pièces." ;) –

Répondre

1

Ainsi, après quelques recherches Google plus créatif, j'ai trouvé une méthode utilisant la classe ShellWindows de shdocvw.dll

En VB/A, avec un ensemble de référence à shdocvw.dll (Microsoft Internet Controls), voici le code que j'utilisé pour obtenir juste une collection de tous les noms de fichiers sélectionnés dans toutes les fenêtres Explorer ouvertes:

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 

je devais utiliser On Error Resume Next parce que, pour une raison quelconque le FocusedItem ne serait pas rien mais je toujours déclencher une erreur. Cela et je ne me soucie pas vraiment de l'utiliser dans ce contexte.

Questions connexes