Shell-Erweiterung für ausgewählte Datei
-
04-07-2019 - |
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.
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?