nach zahlreichen Versuchen und Fehlschlägen wende ich mich wieder an die Community in der Hoffnung, weiter zu kommen.
Ich möchte eine größenveränderliche GUI erstellen, in welcher ich einen Windows-Explorer einbetten möchte.
Der Benutzer soll die Möglichkeit haben, Dateien per Windows-Drag/Drop oder Copy/Paste raus- und rein zu kopieren.
Er soll aber nur das eigentliche Explorerfenster zu sehen bekommen, keinen Schnick-Schnack ringsrum, keine Adressleiste, keine Symbolleiste, keine Statusleiste, keine Vorschau und keine Navigationsleiste.
Die Darstellung soll Detail-Ansicht sein. Ich kann/möchte keinerlei Windows-Einstellungen dazu verbiegen/müssen - der Aufbau des embedded-Explorers muss dies alles bewerkstelligen.
Soweit zu meiner Idealvorstellung. Bei meinen weiteren Beschreibungen verzichte ich der Einfachheit halber auf die Größenveränderlichkeit...
Bislang habe ich verschiedene Wege getestet:
1. mit dem shell.explorer.2-Objekt:
[autoit]
$object = ObjCreate("Shell.Explorer.2")
$GUI_ActiveX = GUICtrlCreateObj ($object, 10, 10, 300, 400)
$object.navigate("\\Server\Freigabe\Ordner")
Dies macht genau meine Ansicht die ich benötige. Problem hier speziell unter Windows 7: Drag/Drop auf eine Datei klappt nicht, bei Rechte Maustaste-Kopieren hängt sich die GUI auf, bei Klicken auf einen Ordner geht immer ein neues Windows-Explorerfenster außerhalb der GUI auf.
Das Problem hier scheint mir, das shell.explorer.2-Objekt ist ein Internet-Explorer-Objekt, welcher im Windows 7 keine Windows-Explorer-Darstellung mehr übernimmt, sondern dies dem Windows-Explorer übergibt, welcher in einem separatem Fenster startet. Dies kann man prima nachstellen, wenn man im Internet-Explorer C:\ eingibt, dann startet ein neues separates Windows-Explorer-Fenster. Dieser Weg wird also meiner Einschätzung nach im Windows 7 nicht mehr gehen. Oder kennt da jemand einen Ausweg?
Ein richtiges Windows-Explorer-Objekt mit IDispatch scheint es im Windows 7 nicht zu geben - ich kenn bislang nur shell.explorer oder Internet.Application oder so ähnlich...
2. mit dem explorer.exe-Prozess:
[autoit]
Run('explorer.exe /n, \\Server\Freigabe\Ordner', "", @SW_HIDE)
WinWait("[CLASS:CabinetWClass]")
$hExplorer = WinGetHandle("[CLASS:CabinetWClass]")
_WinAPI_SetParent($hExplorer, $MaskeChildWin); Explorer als embedded-Objekt setzen
WinMove($hExplorer, "", 10, 10, 300, 400)
_WinAPI_SetWindowLong($hExplorer, $GWL_STYLE, 0x06800000); damit wird der Rahmen entfernt incl. Close- und Minimier-Button
WinSetState($hExplorer, "", @SW_SHOW)
$hList = ControlGetHandle ($hExplorer, "", "[CLASS:DirectUIHWND; INSTANCE:3]"); komischerweise ist es bei Windows 7 nicht "[CLASS:SysListView32; INSTANCE:1]"
$ausgabe = ControlListView ($hExplorer, "", $hList, "ViewChange", "details"); Auf Detail-Ansicht umschalten
;jetzt aus dem Handle das Objekt ermitteln
$o_Shell = ObjCreate("Shell.Application")
$o_ShellWindows = $o_Shell.Windows(); collection of all ShellWindows (IE and File Explorer)
For $o_window In $o_ShellWindows
If $o_window.LocationURL = "file:" & StringReplace($folder, "\", "/") Then
$hExplorerobj = $o_window
ExitLoop
EndIf
Next
;Hier noch erste fehlerhafte Ideen, die Navigationsleiste weg zu bekommen (die links neben der File-Ordner-Ansicht im W7 steht)
$objPane = $hExplorerobj.LocationURL
$o_Shell = ObjCreate("Application.ActiveExplorer")
$objPane = $o_Shell.NavigationPane
$objPane.IsCollapsed = True
Kann mir bitte jemand weiterhelfen, wie ich ein eingebettetes Windows-Explorer-Fenster ohne jeglichen Schnick-Schnack in meine GUI bekomme?