Extension Shell pour le fichier sélectionné
-
04-07-2019 - |
Question
Existe-t-il un moyen de savoir quel fichier est sélectionné dans l'explorateur Windows? J'ai consulté le didacticiel posté ici Le guide des idiots sur ... mais le Les actions décrites sont:
survol
contexte
propriétés du menu
faites glisser
glisser-déposer
Je me demande s’il existe une méthode qui est invoquée lorsqu’un fichier est sélectionné. Par exemple pour créer une vue miniature du fichier.
Merci.
La solution
Voici comment je le fais dans AutoHotkey:
GetWindowsExplorerSelectedFile(_hWnd)
{
local selectedFiles, file
; I can send ^C and parse Clipboard, but this way don't mess with clipboard at all, seems nicer.
; Warning: with this, you get only what is displayed in Explorer!
; If you kept the default Windows setting of not displaying file extensions (bad idea...),
; you will get partial file names...
ControlGet, selectedFiles, List, Selected Col1, SysListView321, ahk_id %_hWnd%
Loop, Parse, selectedFiles, `n ; Rows are delimited by linefeeds (`n).
{
If (A_Index = 1)
{
file := A_LoopField
}
Else
{
; Indicate that several files are selected, we return only the first one
; but count the total number of selected files, to indicate we return a partial result
ErrorLevel := A_Index
}
}
Return file
}
Et je reçois le chemin depuis le champ d'édition de l'explorateur (qui est sujet à des problèmes! Peut être absent ou peut être configuré pour ne pas afficher le chemin complet).
L'idée principale est de demander au contrôle SysListView32 d'Explorer quels sont les éléments sélectionnés et de les obtenir.
Maintenant, c'est un bidouillage, il y a probablement des moyens plus propres ...
PS: a également trouvé ceci: Obtention Éléments ListView en C # à partir de SysListView32 à l'aide de SendMessage
Vous avez besoin de voodoo pour que cela fonctionne sur un autre processus ...
Code réel sur un site français !
Autres conseils
Je suis tombé sur ce script python.
from win32com.client.gencache import EnsureDispatch
for w in EnsureDispatch("Shell.Application").Windows():
print w.LocationName + "=" + w.LocationURL
Mais je ne reçois que le dossier ouvert et non l'élément actuellement sélectionné dans ce dossier.
Quelqu'un a plus d'informations?