Zur bereits gestarteten Instanz des Programmes wechseln

  • Hallo,

    ich möchte nur eine Instanz meines Programmes zulassen und wenn der Anwender es noch einmal zu starten versucht automatisch zur 1. Instanz gewechselt wird.

    Edit1:
    Dies versuche ich mit folgendem Code zu erreichen

    Edit2: größeren Auszug aus Code in Spoiler

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=Adressenverwaltung.exe
    #AutoIt3Wrapper_Res_LegalCopyright=autoBert
    #AutoIt3Wrapper_Res_Language=1031
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    ; *** Start added by AutoIt3Wrapper ***
    #include <EditConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    ; *** Start added by AutoIt3Wrapper ***
    #include <StaticConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #include<ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GuiTreeView.au3>
    #include <GuiListView.au3>
    #include <TreeViewConstants.au3>
    #include <WindowsConstants.au3>
    #include <GuiStatusBar.au3>
    #include <SQLite.au3>
    #include <SQLite.dll.au3>
    #Include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    Opt('MUSTDECLAREVARS' ,1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitel = 'AutoAdress Version 0.8.1'
    If _Singleton($sTitel, 1) = 0 Then
    MsgBox(64, $sTitel, $sTitel & ' ist bereits gestartet')
    WinSetState($sTitel, "", @SW_SHOW)
    WinActivate($sTitel) ;dies Zeile funktioniert nicht obwohl AutoAdress gestartet
    ;WinActivate("Unbenannt -") ;diese Zeile funktioniert wenn Notepad.exe gestartet
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit][/autoit]

    Das Verhindern einer 2. Instanz klappt, aber er wechselt nicht zur bereits gestarteten EXE, kommischer weise kann ich aber ohne Probleme zu Notepad wechseln.

    Wäre toll wenn jemanden eine Lösung zu dem Problem einfällt

    mfg (Auto)Bert

    3 Mal editiert, zuletzt von AutoBert (3. April 2009 um 18:20)

  • funkey Danke, hab ich probiert _Singleton klappt prima aber der Versuch mit WinActivate zur 1. Instanz zu wechseln leider nicht.
    hab im 1 ein Spoiler eingebaut mit dem derzeitigen Code

  • funkey die neue GUI wird erst nach der _Singletonabfrage erstellt, der neue Codeauszug im Spoiler beginnt in Zeile 1 (sind jetzt halt viele unnötige Sachen für das Beispiel enthalten)

    mfg AutoBert

  • Da du

    [autoit]

    WinSetState($sTitel, "", @SW_SHOW)

    [/autoit]

    verwendest, denke ich dass du dass Fenster im Normalbetrieb ins Traymenü minimiert hast, also versteckt ist und über das TrayIcon wieder sichtbar geschalten wird. Wird das Fenster so überhaupt nicht sichtbar? Hast du es aus dem Bildschirmbereich geschoben (WinMove)? Ich habe eigentlich sonst keine Erklärung, außer dass der Titel nicht passt. Dann würdest du eventuell das brauchen:

    [autoit]

    Opt("WinTitleMatchMode", 2)

    [/autoit]
  • habe kurz vor dem Einfügen von _Singleton und WinActivate den Fenster-Titel in einer Varibalen abgelegt und dann dummerweise die Variable innerhalb der Anführungszeichen hineinkopiert. Kleiner Fehler, maximale Wirkung.
    funkey Danke für die Tipps, jetzt klappt alles wunderbar :thumbup:.

    Spoiler anzeigen
    [autoit]


    ; *** Start added by AutoIt3Wrapper ***
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    ; *** End added by AutoIt3Wrapper ***
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Add_Constants=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #Include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Opt('GUIOnEventMode', 1)
    Opt('MUSTDECLAREVARS' ,1)

    [/autoit] [autoit][/autoit] [autoit]

    Global $sTitel = 'Test AutoAdress Version 0.8.1'
    If _Singleton($sTitel, 1) = 0 Then
    MsgBox(64, $sTitel, $sTitel & ' ist bereits gestartet')
    ;WinSetState($sTitel, "", @SW_SHOW)
    WinActivate($sTitel) ;dies Zeile funktioniert nicht obwohl AutoAdress gestartet
    ;WinActivate("Unbenannt -") ;diese Zeile funktioniert wenn Notepad.exe gestartet
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Global $hfrmMain ;HauptFenster

    [/autoit] [autoit][/autoit] [autoit]

    _Main()

    [/autoit] [autoit][/autoit] [autoit]

    Func _Main()
    Local $hmnuitmFile, $hmnuitmExit
    $hfrmMain = GUICreate($sTitel, 800, 540, -1, -1, $WS_SIZEBOX + $WS_SYSMENU +$WS_MAXIMIZEBOX +$WS_MINIMIZEBOX)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_exitMain')

    $hmnuitmFile = GUICtrlCreateMenu("&Datei")
    $hmnuitmExit = GUICtrlCreateMenuItem("Be&enden", $hmnuitmFile)
    GUICtrlSetOnEvent(-1, '_exitMain')
    GUISetState(@SW_SHOW,$hfrmMain)
    While 1
    Sleep(1000)
    WEnd
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _exitMain()
    Switch @GUI_WINHANDLE
    Case $hfrmMain
    Exit
    EndSwitch
    EndFunc

    [/autoit]