Script pausiert einfach so: Gründe / Lösung

  • Salü miteinander

    Für unsere Kassensysteme habe ich eine halb transparente GUi gebastelt, mit welcher man zwischen Applikationen hin- und her hüpfen kann. Diese Gui habe ich mit $WS_EX_TOPMOST zuvorderst. Leider arbeitet unsere Kassenapplikation ebenso mit diesem Flag, sprich, sie überdeckt bei einer bestimmten Aktion einfach meine GUI.

    Um dem Abhilfe zu schaffen, lasse ich (hab keine andere Lösung, bislang) eine zweite Applikation laufen, welche alle 7 Sekunden die GUI wieder in den Vordergrund schiebt.

    Diese Applikation läuft im Hintergrund einfach mit.

    An und für sich funktioniert das, wenn's auch nicht allzu schön ist, wenn wegen einer App gleich zwei laufen müssen.

    Heute jedoch ging ich zu einer im prod. Feld eingesetzten Kasse, und sah: mein GUI ist weg. Als ich die Überwachungs-Applikation überprüfte, war diese auf "paused" gestellt.

    nun, das war bis jetzt ein Einzelfall. Aber ich muss diesen verhindern.

    Drum: Was sind die Gründe, warum eine App einfach so Pause machen kann? (ohne Fremdeinwirkung)

    Falls das Fremdeinwirkung war: ich werde dem mit dem Break(0) - befehl Abhilfe schaffen.

    Dennoch: Falls das ohne Fremdeinwirkung geschah, hab ich da ein Problem, das es zu lösen gilt.

    Hat mir da jemand einen Hint?

    Das Überwachungsscript ist relativ simpel:

    [autoit]

    while 1
    if WinExists("FloDock") then

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

    WinSetOnTop("FloDock", "", 1)
    WinSetOnTop("Switch","",1)
    Else
    run(@scriptdir&"\FLOdock.exe")

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

    EndIf
    sleep(10000)

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

    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Landfloh (3. Februar 2014 um 12:24)

    • Offizieller Beitrag

    Normalerweise pausiert das Script sobald man auf das TrayIcon klickt.
    Verhindern kann man das, indem man entweder:

    [autoit]

    Opt('TrayAutoPause', 0)

    [/autoit]


    einfügt (keine automatische Pause mehr, aber das TrayIcon ist noch vorhanden) oder gleich:

    [autoit]

    #NoTrayIcon

    [/autoit]


    einfügen und das TrayIcon komplett verstecken.

  • Landfloh

    du kannst das doch auch gleich in deienr 1. GUI mit unterbringen!
    das sollte eigentlich funktionieren ...

    Beispiel ....

    [autoit]


    ;testgui

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

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $button_1,$button_2, $button_3, $button_4
    Local $Halt, $msg

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

    AdlibRegister("timer", 10000) ;alle 10 sek

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

    Opt("GUICoordMode", 1)
    GUICreate("Test", 140, 260)

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

    $button_1 = GUICtrlCreateButton("Earth", 20, 20, 100, 40)
    $button_2 = GUICtrlCreateButton("Water", 20, 80, 100, 40)
    $button_3 = GUICtrlCreateButton("Fire", 20, 140, 100, 40)
    $button_4 = GUICtrlCreateButton("Air", 20, 200, 100, 40)

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    AdlibUnRegister("timer")
    Exit
    Case $msg = $GUI_EVENT_MINIMIZE
    Case $msg = $GUI_EVENT_MAXIMIZE

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

    Case $msg = $button_1
    WinActivate ("Earth")
    Case $msg = $button_2
    WinActivate ("Water")
    Case $msg = $button_3
    WinActivate ("Fire")
    Case $msg = $button_4
    WinActivate ("Air")

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

    Case $Halt = $msg

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

    EndSelect
    WEnd

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

    Func timer()
    ;MsgBox(0,"","test",1) ;Test MSGBOX
    WinActivate("Test")
    WinSetOnTop("Test","",1)
    EndFunc

    [/autoit]

    gruß gmmg