_Singleton ... AutoItWinSetTitle

  • Mittels ausgiebiger Recherche versuche ich ein Programm, aufrufbar aus dem Kontextmenü, zum laufen zu bringen. Im Explorer, rechte Maustaste auf ein Verzeichnis (bzw. -baum), bendef. Ausdruck (das ist das Programm um das es geht) .. funktioniert. Wenn ich allerdings mehr wie ein Verzeichnis im Explorer markiere, habe ich das Problem, das für jede Markierung einmal das Programm gestartet wird (das ist nicht notwendig, da ich im Programm selber die

    ev. markierten Verzeichnisse behandle, das funktioniert auch schon perfekt).

    Also: kein Poblem ... _Singleton ... dachte ich.

    Status:

    2 PCs, beide Win7/64

    daheim:

    _Singleton funktioniert NICHT, Programm wird mehrmals gestartet

    gelöst mit AutoItWinSetTitle, das funktioniert, Programm wird nur einmal gestartet.

    If WinExists($sName) Then Exit

    AutoItWinSetTitle($sName)

    Firma:

    _Singleton funktioniert, AutoItWinSetTitle funktioniert nicht, Programm wird mehrfach gestartet

    If _Singleton($sname, 1) = 0 Then Exit

    Ich habe hier und auch im Internet schon ziemlich alles durchforstet. Bis auf die Möglichkeit einen Registry-Key zu schreiben (mit Zeitmarkierung) und

    auf diesen zu prüfen habe ich alles durch.

    Fakt scheint: _Singleton und AutoItWinSetTitle funktionieren beide nicht zuverlässig.

    Der Unterschied zwischen den PCs: daheim keine Domäne, in der Firma schon. Vielleicht hängt es damit zusammen.

    Also werde ich wohl auf die Domäne abfragen und dann je nach Gegebenheit _Singleton bzw. AutoItWinSetTitle verwenden.

    LG

  • Im Explorer, rechte Maustaste auf ein Verzeichnis (bzw. -baum), bendef. Ausdruck (das ist das Programm um das es geht) .. funktioniert.

    Ich verstehe hier nur Bahnhof, Koffer klauen... erkläre das bitte mal genauer.

    Zudem wäre ein Minimal-Script mit ein paar Kommentaren nicht übel, damit man besser verstehen kann, was du da vor hast.

  • Ich verstehe hier nur Bahnhof, Koffer klauen... erkläre das bitte mal genauer.

    Zudem wäre ein Minimal-Script mit ein paar Kommentaren nicht übel, damit man besser verstehen kann, was du da vor hast.

    Es geht darum das ein Script nur EIN mal gestartet wird. Wenn ich im Explorer mehrere Verzeichnisse markiere und über das Kontextmenü (rechte Maustaste) mein Programm starte, wird dieses sooft aufgerufen, als ich Verzeichnisse markiert habe. Das ist unerwünscht, da ich über

    Local $hExplorer = WinGetHandle("[REGEXPCLASS:^(Cabinet|Explore)WClass$]") 

    If Not $hExplorer Then 

    MsgBox(BitOR($MB_ICONERROR, $MB_SYSTEMMODAL), $sName, "Dieses Programm läßt sich nur aus dem Explorer aufrufen!", 0) 

    Exit 

    EndIf 

    Local $oShell = ObjCreate("Shell.Application") 

    For $oWindow In $oShell.Windows() 

    If $oWindow.HWND() = $hExplorer Then ExitLoop 

    Next 

    ein Objekt erhalte, das alle im Explorer markierten Verzeichnisse enthält, die im Programm in einer for_next-Schleife der Reihe nach abgearbeitet werden.

    Diesen Mehrfachaufruf habe ich versucht durch _Singleton bzw. AutoItWinSetTitle in den Griff zu bekommen. D.h. es soll nur eine einzige Instanz des Programmes gestartet werden, das Programm beim Aufruf prüfen obs schon läuft und sich in dem Fall beenden.

    Dabei bin ich auf die obig erwähnten Probleme gestoßen, da anscheinend mit oder ohne Domäne das Verhalten von _Singleton sowie auch von AutoItWinSetTitle anders ist. Natürlich kann der Fehler auch woanders liegen, die Domäne hat sich aufgedrängt, da die PCs ansonsten gleich konfiguriert sind.

    LG

  • Schau mal, ob dir das hier hilft:

    Du musst das Script erst kompilieren und dann die Exe (via Kontextmenü) starten!

    Einmal editiert, zuletzt von Bitnugger (10. Dezember 2020 um 16:16) aus folgendem Grund: WinList durch WinGetHandle ersetzt.

  • Danke.

    Hab ich probiert (zumindest in der Firma, PC ist in der Domäne).

    Das Fenster wird sooft geöffnet, als ich Verzeichnisse im Explorer markiert habe (bei 3 markierten).

    Das funktioniert aber nicht immer gleich. Bei 12 markierten Verzeichnissen wird (meistens) 1 Fenster

    geöffnet, manchmal mehr als eines. Sehr eigenartig.

    LG

  • Nicht so schöne Lösung aber evtl. ein workaround:

    Schon mal über eine Flag-Datei nachgedacht?

    1. Programm startet
    2. Prüfen ob Flag Datei existiert,
      • wenn ja -> beenden (ohne diese zu löschen),
      • wenn nein -> Flagdatei erstellen und weiter im Programm
    3. Beim beenden des Programms die Flag-Datei löschen.

    Aber Achtung: Bei einem Crash müsstest du sie manuell löschen.

  • Ja, wär eine Möglichkeit. Könnte auch einen Registry-Schlüssel mit Zeitstempel setzen, den könnte ich automatisch löschen

    lassen wenn z.B. der Zeitstempel um 5 sek. abweicht.

    Ich mach daheim noch den Test auf die Domänenvariante (in der Domäne _singleton, nicht in Domäne AutoItWinSetTitle).

    Grundsätzlich funktioniert _singleton ja, aber nur am FirmenPC (-> Domäne). Daheim am PC gehts nicht, dafür aber mit

    AutoItWinSetTitle.

    Ich meld mich wenn ich probiert habe.

    LG

  • Hm, ich kann bis zu 15 Verzeichnisse markieren, ab 16 wird das Programm nicht mehr im Kontextmenü angezeigt. Es öffnet sich jedoch in allen Fällen immer nur 1 Fenster bei mir. Die Sortierung der Verzeichnisse, so wie sie im Explorer angezeigt werden, geht beim Senden via WM_COPYDATA allerdings verloren, weil die Nachrichten wohl unterschiedliche Laufzeiten haben.

    Ich habe das Script in Post #4 noch ein wenig geändert...

  • Zwischenzeitlich habe ich das Problem so gelöst:

    löst zwar nicht das Verhalten von _singleton (warum es auf einem PC geht, am anderen nicht) aber funktioniert zumindest zuverlässig und es wird nur eine Instanz des Programmes gestartet.

    Grüsse und danke an alle die das Problem behirnt haben ..

    LG

  • löst zwar nicht das Verhalten von _singleton (warum es auf einem PC geht, am anderen nicht)

    Teste bitte mal, ob es so funktioniert:

    Einmal editiert, zuletzt von Bitnugger (11. Dezember 2020 um 13:50)

  • Danke!

    Hab ich probiert. Am Firmen-PC (mit Domäne, WinDefender :) wird - meistens - nur ein Fenster geöffnet und ich sehe die Warnmeldung in diesem Fenster, das schon eine Instanz läuft, wie gesagt, meistens. Wenn man öfter probiert werden manchmal trotzdem mehrere Fenster geöffnet. Das Verhalten ist nicht klar reproduzierbar. Überwiegend funktionierts, manchmal nicht.

    Daheim-PC (Win7/64 gleich wie in der Firma, AvastAV, keine Domäne, kein Wins, kein NetBios, reine Netzwerkverbindung über IP) werden die schon laufenden Instanzen in gar keinem Fall erkannt und soviele Fenster geöffnet, als ich Verzeichnisse im Explorer markiert habe.

    LG