embedded Windows-Explorer unter Windows 7 / 8.1 und Drag & Drop defekt

  • Ich habe seit Jahren für Windows 7 ein größeres Script, mittels welchem ich Netzwerkfreigaben in einer GUI darstelle und somit ohne Wissen des Anwenders über den konkreten Netzwerkpfad innerhalb unserer Firma auf Button-Druck ein Drag&Drop auf verschiedene Freigaben ermögliche. Es gibt z.B. einen Ordner "Bilder hochladen", der Anwender drückt den Button Bilder hochladen und kann aus seinem Windows heraus (z.B. seiner Kamera) Bilder in die dann angezeigte Freigabe verschieben/kopieren.

    Der Quellcode ist einfach runtergebrochen:

    Code
    GUICreate("",700,700)
    GUISetState()
    $object = ObjCreate("Shell.Explorer.2")
    $GUI_ActiveX = GUICtrlCreateObj($object, 10, 10, 300, 400)
    $object.navigate("C:\")
    While GUIGetMsg() <> -3
    WEnd

    Seit ner Weile (ich kann nicht genau sagen seit wann oder wodurch) klappt dies selbst mit diesem einfachen Code nicht mehr. Probiert hab ichs bei Windows 7 und bei, seit dem neu hinzugekommenen Windows 8.1.
    Auch habe ich innerhalb dieser Zeit das Autoit von Version 3.3.6.1 (aus dem Jahr 2010) auf die Version autoit-v3-setup_3.3.12.0.exe (und zwischenzeitlich auf autoit-v3.3.13.19-beta-setup.exe wegen eines Bugs beim Kompilieren) geupdatet.

    Kann mir jemand sagen, warum bei diesen wenigen Codezeilen das Drag&Drop ins Fenster oder aus dem Fenster heraus nicht mehr klappt - bzw. was kann ich machen, damit es wieder geht?
    Wenn ich innerhalb des Fensters auf eine Datei/Ordner mit rechts klicke->Kopieren, dann kann ich es weder innerhalb des Fensters noch ausserhalb auf dem Desktop einfügen. Acu so Sachen wie "Hierher kopieren" oder "Hierher verschieben" sind nicht vorhanden. Ich kann keine Datei/Ordner innerhalb der GUI verschieben, sie lassen sich nicht mit gedrückter Maustaste "aufnehmen". Ich kann aber rechte Maustaste auf einen Ordner "In neuem Fenster öffnen" machen, dann geht ein weiteres Explorerfenster ausserhalb der GUI auf - in dem hab ich dann volle Rechte mit allem wie es sein muss.

    Ich bitte um Hilfe, wie ich das Drag&Drop wieder herstellen kann - Vielen Dank

  • Dein Beispielscript funktioniert bei mir fehlerfrei, sowohl bei Aktionen innerhalb des Fensters, als auch bei Aktionen zwischen Fenster und anderen Windows Explorer Instanzen.

    Autoit: 3.3.6.1
    Windows: 7 Pro x64 (aktueller Updatestand)

    Hier einige Vermutungen woran es liegen könnte:

    1. Autoit Version -> Teste eine der alten bewährten Versionen 3.3.6.1 / 3.3.8.1
    2. Unterschiedliche Benutzer(rechte), z.B. wenn du das Script explizit als Administrator oder mit einem anderen Account ausführst.
    3. Sonstige Windowseinstellungen -> Teste das Script auf einem sauberen neu installierten System ohne weitere Einstellungen (z.B Gruppenrichtlinien aus eurer Domäne)
    4. Virenschutz -> Teste ob das Script bei deaktiviertem Virenschutz funktioniert, wenn ja erstelle entsprechende Ausnahmen für dein Script.
    5. Störende Software, z.B. weitere Scripte oder sonstige Programme die mit der Zwischenablage arbeiten oder Maus Interaktionen abfangen (Hook) -> Teste das Script auf einem sauberen neu installierten System ohne weitere Scripte / Software

    PS:
    Da ich evtl. Verwendung dafür habe... kann man den Explorer auch so einbetten, dass eine Navigation möglich ist? Bei deiner Variante kommt man aus einem Unterordner leider nicht mehr zurück.

  • Für mich ein wenig schade, das es bei dir geht.
    1. probier ich mal aus
    2. ich teste aktuell nur als Admin, da es bei den Benutzern und bei mir nicht geht
    3. das System ist jungfräulich - daran dachte ich auch bereits
    4. kein Virenschutz, da ein "Rücksetzsystem" - HDD ist im "nur Lese Zugriff" - alle Schreibzugriffe werden in eine Datei geschrieben, diese wird bei jedem Start geleert
    5. kann ich ausschließen

    Bleibt also nur 1. - das teste ich nächste Woche

    Zurück geht es mit einem extra Button ausserhalb der $GUI_ActiveX - bei mir aber kein klassisches zurück sondern nur ein "Ordner rauf" - ist aber für meinen Zweck ausreichend
    musst oben noch das $object.navigate("C:\") ersetzen durch

    Code
    $folderorg = "C:\"
    $folder = $folderorg
    $object.navigate($folder)


    damit verhindere ich ausserdem, das der Benutzer in der Ordnerstruktur höher kommt wie der Ausgang ($folderorg) - speziell in Verbindung mit Netzlaufwerken wichtig

    Codeauszug aus der while-wend-Schleife

    Code
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button
       GUICtrlSetState($Button, $GUI_NOFOCUS)
        $i = StringLeft($folder, StringInStr($folder, "\", 1, -1)-1)
        If StringInStr($i, $folderorg, 2) > 0 Then
         $object.navigate($i)
    EndSwitch
    Wend
  • Bleibt also nur 1. - das teste ich nächste Woche

    Hi card0384,
    ich konnte dein Problem nachvollziehen. Bei meinem ersten Versuch klappte es auch nicht. Dann habe ich mich an misterspeeds Vorschlag gehalten und die AutoIt Version 3.3.6.1 gezogen. Damit klappte Drag&Drop einwandfrei :)

    Grüße autoiter