Estensione shell per il file selezionato
-
04-07-2019 - |
Domanda
C'è un modo per sapere quale file viene selezionato in Windows Explorer? Ho visto il tutorial pubblicato qui Guida degli idioti a ... ma il le azioni descritte sono:
hover
contesto
proprietà del menu
trascinamento
trascina e rilascia
Mi chiedo se esiste un metodo che viene invocato quando viene selezionato un file. Ad esempio per creare una vista in anteprima del file.
Grazie.
Soluzione
Ecco come lo faccio in 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
}
E ottengo il percorso dal campo di modifica di Explorer (che è soggetto a problemi! Può essere assente o può essere impostato per non visualizzare il percorso completo).
L'idea principale è chiedere al controllo SysListView32 di Explorer quali sono gli elementi selezionati e ottenerli.
Ora, è un hack, probabilmente ci sono modi più puliti ...
PS .: Ho trovato anche questo: Articoli ListView in C # da SysListView32 utilizzando SendMessage
Hai bisogno di un po 'di voodoo per farlo funzionare su un altro processo ...
Codice reale in un sito francese !
Altri suggerimenti
Mi sono imbattuto in questo script Python.
from win32com.client.gencache import EnsureDispatch
for w in EnsureDispatch("Shell.Application").Windows():
print w.LocationName + "=" + w.LocationURL
Ma ottengo solo la cartella aperta e non l'elemento attualmente selezionato in quella cartella.
Qualcuno ha più informazioni?