Frage

Gibt es eine Möglichkeit zu wissen, welche Datei im Windows-Explorer ausgewählt wird? Ich habe im Tutorial der Suche hier gepostet Idiots führen zu ... aber die Aktionen beschrieben sind:

Hover

Kontext

Menü Eigenschaften

drag

Drag & Drop

Ich frage mich, ob es gibt eine Methode, die aufgerufen werden, wenn eine Datei ausgewählt ist. Zum Beispiel einer Miniaturansicht der Datei zu erstellen.

Danke.

War es hilfreich?

Lösung

Hier ist, wie ich es in AutoHotkey tun:

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
}

Und ich bekomme den Pfad aus dem Eingabefeld des Explorer (was zu Problemen anfällig ist! Kann nicht anwesend sein oder kann nicht aufgebaut werden vollständigen Pfad anzuzeigen).

Die Kernidee ist es, die SysListView32 Kontrolle von Explorer zu fragen, was die ausgewählten Elemente sind, und erhalten sie.

Nun, das ist ein Hack, gibt es wahrscheinlich saubere Wege ...

PS .: fanden auch diese: Erste Listview-Elemente in C # aus SysListView32 mit Sendmessage
einige Voodoo benötigen sie auf einem anderen Prozess zum Laufen zu bringen ...

Real-Code in ein Französisch Website !

Andere Tipps

Ich kam in diesem Python-Skript.

from win32com.client.gencache import EnsureDispatch 

for w in EnsureDispatch("Shell.Application").Windows(): 
    print w.LocationName + "=" + w.LocationURL 

Aber ich bekomme nur den Ordner, der das aktuell ausgewählte Element in diesem Ordner geöffnet und nicht ist.

Wer hat mehr Informationen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top