Hi Leute,
hat jemand ne Idee, wie man von einem Window-Handle auf den Pfad schließen kann? Bsp.
Handle = 0xIRGENDWAS (Fenster Titel: "Eigene Dateien"). Wie komm ich nun auf den Pfad des Ordners "Eigene Dateien"???
gruß, Steffen
Hi Leute,
hat jemand ne Idee, wie man von einem Window-Handle auf den Pfad schließen kann? Bsp.
Handle = 0xIRGENDWAS (Fenster Titel: "Eigene Dateien"). Wie komm ich nun auf den Pfad des Ordners "Eigene Dateien"???
gruß, Steffen
Hi,
wie bekommst du denn den Handle?
So long,
Mega
.....Über WinGetHandle("")
WinGetTitle kannst du doch mit dem Handle befüllen, oder?
peethebe
ZitatOriginal von peethebee
WinGetTitle kannst du doch mit dem Handle befüllen, oder?peethebe
Jep....aber das bringt nicht viel. Hab dann zwar den Namen des Fensters......aber immer noch nicht den Pfad
Wie pfad?
zb beim Explorer, oder meinst du wenn du eine..... GUI.exe hast, die eben ne gui macht, und du willst den pfad der GUI.exe?
Beispiel:
Über den Explorer ist das Verzeichnis c:\X\Y\Beispiel_1 geöffnet und das Fenster ist aktiv. Der Fenstertitel lautet dann "Beispiel_1". Mit WinGetHandle("") oder WinGetTitle("") kann ich nun den Handle oder den Titel des Fenster abfragen. Aber wie bekomme ich den Pfad c:\X\Y\Beispiel_1 ????
Hi,
[autoit]MsgBox(0,"", ControlGetText('[CLASS:ExploreWClass]', '', 41477))
[/autoit]So long,
Mega
So Ähnlich hab ich's jetzt auch gemacht
[autoit]$window = WinGetTitle("")
$path = ControlGetText ($window, "", 41477 )
Deines ist aber besser.....
Vielen Dank!
Hi,
kein Problem.
So long,
Mega
Sorry, dass ich den Thread nochmal hoch hole! Hat jemand ne Idee, wie man das auch anders lösen kann? Es funktioniert zwar sehr gut aber eben nur, wenn der User auch die Adressleiste des Explorers "eingeschalten" hat.
Vielen Dank schonmal!
*schieb*
Hi,
wo ist die Frage/das Problem?
Mega
@qon
Bringt mir leider nichts....aber trotzdem vielen Dank!
@ Xenobiologist
Wie gesagt, dein oben erwähnter Vorschlag (die Adressleiste vom Explorer auszulesen), funktioniert zwar super aber eben nur, wenn der User auch die Adressleiste des Explorers aktiviert hat. Das Skript soll eigentlich auf mehreren Rechnern laufen und jedem einzelnen User zu verklickern, dass er doch bitte die Adressleiste aktivieren soll ist nicht wirklich das Wahre.
Hab dir mal ein kleines Beispiel gebastelt.
Mit der Funktion _GetExplorerWinOpenedPath brauchst du nur das Window-Handle deines Explorer-Fensters um den Pfad rauszubekommen.
Und als 2. Parameter ein Verweis auf ein geöffnetes Shell-Object - das aber nur wegen eines bisher nicht behobenen Memory-Leaks in Autoit.
Opt("WinTitleMatchMode", 4)
Global $ShellObject = ObjCreate("Shell.Application")
Dim $Pfade = ''
$WinList = WinList('[CLASS:ExploreWClass]')
For $i = 1 To $WinList[0][0]
$Pfade &= _GetExplorerWinOpenedPath($WinList[$i][1], $ShellObject) & @CRLF
Next
MsgBox(0, "", "Pfade geöffneter Explorer-Fenster:" & @CRLF & @CRLF & $Pfade)
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]Func _GetExplorerWinOpenedPath($WinHandle, ByRef $ShellObject)
If (Not IsObj($ShellObject)) And (Not ObjName($ShellObject) == 'IShellDispatch4') Then Return SetError(1, 0, '')
For $Window In $ShellObject.Windows
If ObjName($Window) == 'IWebBrowser2' Then
If $Window.HWND = $WinHandle Then
Return StringReplace(StringReplace(StringReplace($Window.LocationURL, 'file:///', ''), '/', '\'), '%20', ' ')
EndIf
EndIf
Next
Return SetError(2, 0, '')
EndFunc
Perfekt!!! Vielen Dank!