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.

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top