Hat jemand ne Idee wie man die ordner dann wieder öffnen kann?
ProcessClose geht nicht ganz
-
- [ offen ]
-
m-obi -
3. Februar 2009 um 03:13 -
Geschlossen -
Erledigt
-
-
vorhher die pfade der zurzeit geöffneten ordner saven und nachher wieder öffnen?
-
Meines Wissens kann man leider den aktuellen Pfad des Explorers nicht auslesen.
folgendes Script stellt alle Ordner wieder her, in welchen im Title der Pfad steht...
[autoit]
Funktioniert also nicht bei "Eigenen Dateien", "Arbeitsplatz" usw...$Temp=RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoRestartShell")
[/autoit][autoit][/autoit][autoit]
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoRestartShell", "REG_DWORD", 0)
$aProcess=ProcessList("Explorer.exe")
$aWindow=WinList()Global $aFolder[2]=[1,""],$iCnt=1
[/autoit][autoit][/autoit][autoit]
For $i=1 To $aWindow[0][0]
$hPid=WinGetProcess($aWindow[$i][1])
For $j=1 To $aProcess[0][0]
If $hPid=$aProcess[$j][1] And BitAND(WinGetState($aWindow[$i][1]),2) And StringInStr($aWindow[$i][0],":\") Then
$iCnt+=1
ReDim $aFolder[$iCnt+1]
$aFolder[$iCnt]=$aWindow[$i][0]
EndIf
Next
$aFolder[0]=$iCnt
NextWhile ProcessExists("explorer.exe")
[/autoit][autoit][/autoit][autoit]
ProcessClose("explorer.exe")
WEndFor $i=1 To $aFolder[0]
[/autoit][autoit][/autoit][autoit]
Run('explorer.exe ' & $aFolder[$i])
NextRegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon", "AutoRestartShell", "REG_DWORD", $Temp)
[/autoit]lgE
-
- Offizieller Beitrag
Die Pfade von allen geöffneten Explorerfenstern?
[autoit]
Doch, das geht:
[/autoit][autoit][/autoit][autoit]
$var = WinList()
For $i = 1 To $var[0][0]
; Only display visible windows that have a title
If $var[$i][0] <> "" And IsVisible($var[$i][1]) Then
$text = StringRegExpReplace($var[$i][0], '.*?\((.+)\)', '$1')
$path = ControlGetText('[CLASS:CabinetWClass]', $text, 'Edit1')
If $path <> "" Then MsgBox(0, "Details", "Title=" & $var[$i][0] & @LF & "Handle=" & $var[$i][1] & @LF & "Pfad=" & $path)
EndIf
NextFunc IsVisible($handle)
[/autoit]
Return BitAND(WinGetState($handle), 2)
EndFunc ;==>IsVisible -
Das geht bei mir nicht...
Das Script findet nur die "Eigenen Dateien", und da bekommt man auch keinen Pfad heraus -
- Offizieller Beitrag
Verstehe ich nicht!
Ich habe als Beispiel drei Explorerfenster geöffnet ("Eigene Dateien", "Arbeitsplatz" und "C:\") und bei mir kommen drei MsgBoxen mit Titel, Handle und Pfad.Äh...hast Du Vista? Weil bei mir: XP
-
Ich hab XP.
Hab aber grad was entdeckt:
Es ist ein Unterschied, ob man den Explorer via Start-Rechtklick öffnet, oder mit Doppelklick auf einen Ordner.
Jenachdem lautet die Class "ExploreWClass" oder "CabinetWClass"Da find ich es dann doch einfacher den WindowTitle auszulesen...
Aber bei z.B. "Eigene Dateien" steht da nur "Eigene Dateien" und nicht der Pfad. Sowohl im Edit1 wie auch im WindowTitle.
lgE
-
- Offizieller Beitrag
Uh, stimmt!
Man müsste dann zwei Tests machen oder, wie Du vorgeschlagen hast, über den WindowTitle.Dass da nur "Eigene Dateien" steht macht aber nichts, denn man kann den Explorer auch damit aufrufen:
[autoit]
[/autoit]
ShellExecute('explorer', '', 'Eigene Dateien') -
So geht's auch, wenn es nur einen Explorer-Process gibt
Spoiler anzeigen
[autoit]$oShell = ObjCreate("shell.application")
[/autoit] [autoit][/autoit] [autoit]
$oShellWindows = $oShell.windows
$Process = ProcessList('explorer.exe')If IsObj($oShellWindows) Then
[/autoit]
$string = ""
For $Window In $oShellWindows
If WinGetProcess($Window.LocationName) = $Process[1][1] Then $string &= $Window.LocationName & @CRLF
Next
MsgBox(0, "Shell Windows", "You have the following shell windows:" & @CRLF & @CRLF & $string);
EndIf -
- Offizieller Beitrag
Das zeigt bei mir aber nicht den vollen Pfad an, sondern nur das letzte Verzeichnis.
-
Nimm ShelleExecute(Window.LocationURL)
Spoiler anzeigen
[autoit]$oShell = ObjCreate("shell.application")
[/autoit] [autoit][/autoit] [autoit]
$oShellWindows = $oShell.windows
$Process = ProcessList('explorer.exe')If IsObj($oShellWindows) Then
[/autoit]
$string = ""
For $Window In $oShellWindows
If WinGetProcess($Window.LocationName) = $Process[1][1] Then $string &= $Window.LocationURL & @CRLF
Next
MsgBox(0, "Shell Windows", "You have the following shell windows:" & @CRLF & @CRLF & $string & @CRLF & @CRLF & "open last window again");
ShellExecute($Window.LocationURL)
EndIf -
- Offizieller Beitrag
Window.LocationURL, klappt!
Verdammt, den kannte ich noch nicht.
-
Bei mir klappt es nicht ganz, er zeigt mir nur an, wenn ich Ordner öffne, die auf Laufwerk C liegen. Aber nicht, wenn ich Odner öffne die auf anderen Laufwerken liegen.
Btw: Woher wisst ihr immer welche Objekte ihr nehmen müsst z.B. "shell.application" und welche Variablen z.B. "$oShell.windows" ihr nehmen müsst?
-
So klappt es bei mir super:
Spoiler anzeigen
[autoit]$oShell = ObjCreate("shell.application")
[/autoit] [autoit][/autoit] [autoit]
$oShellWindows=$oShell.windowsIf Isobj($oShellWindows) Then
[/autoit] [autoit][/autoit] [autoit]
$string=""For $Window In $oShellWindows
[/autoit] [autoit][/autoit] [autoit]
$String = $String & $Window.LocationName & "/"
NextMsgBox(0,"","Es gibt folgende geöffnete Fenster:" & @CRLF & $String)
[/autoit] [autoit][/autoit] [autoit]
ElseMsgBox(0,"","Es gibt keine geöffneten Fenster.")
[/autoit]
EndifIst das eigentlich egal, wenn man die Variable $string mal groß und mal klein vorne schreibt?
-
Hi
Bei mir klappt das nicht
Es fehlen z.b. die Laufwerksbuchstaben...("Test" statt "D:\Test")Brauchbare Ergebnisse liefert bei mir jedoch
[autoit].LocationUrl
[/autoit]Und JA, die Groß u Kleinschreibweise bei Variablen ist eigentlich egal.
Aber je länger man programmiert, desto mehr achtet man (unbewusst) auf die gleiche SchreibweiselgE
-
Er zeigt dir in meinem Fall nur die Fenstertitel an.
Bei dir den ganzen Pfad mit .LocationUrl?
-
So sieht das Ergebnis bei mir aus:
Window.LocationName:
Window.LocationUrl:
Codefile:///C:/Dokumente und Einstellungen/GreyGoa/Eigene Dateien file:///D:/Test file:///C:/WINDOWS
lgE
EDIT: hab jetzt erst bemerkt, daß Progandy das mit LocationUrl schon geschrieben hat
Sollte die Posts doch genauer lesen -
-
Wie kann ich sagen das er die Strings die "http://" enthalten, nicht nehmen soll?
Oder kann ich ihn generell sagen, dass er die Strings vom Internet Explorer nicht nehmen soll?Spoiler anzeigen
[autoit]Func _Window()
[/autoit] [autoit][/autoit] [autoit]
$oShell = ObjCreate("shell.application")
$oShellWindows=$oShell.windowsIf Isobj($oShellWindows) Then
[/autoit]
$StringName = ""
$StringURL = ""
For $Window In $oShellWindows
$StringName = $StringName & $Window.LocationName & "\"
$StringURL = $StringURL & $Window.LocationURL & "\"
Next
$StringName = StringTrimRight($StringName, 1)
$StringURL = StringTrimRight($StringURL, 1)
Return ($StringName & "|" & $StringURL)
Else
Return ""
Endif
EndFunc -
[autoit]
If Not StringInStr($string, "http://") Then ;...
[/autoit] -