GUI soll nur angezeigt werden wenn ein Fenster aktiv ist.

  • Hallo zusammen,

    ich bastel mir mal wieder was zusammen und stosse mal wieder an meine Grenzen ;o)

    Ich möchte ein AutoIT Script im Hintergrund laufen lassen, das solange wartet, bis ein bestimmes Fenster aktiv ist. Dann soll eine GUI (in dem Fall nur ein Button) über das aktive Fenster gelegt werden.

    Mein Script macht das zwar, aber das aktive Fenster und der Button flackert nur (sieht aus wie aktiv, nicht aktiv, aktiv, nicht aktiv) und der der Button lässt sich aus dem Grund auch nicht betätigen. Wie sollte ich dieses Thema richtig angehen ??

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <array.au3>

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

    $x=1
    $y=1

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 244, 244, $x, $y,$WS_POPUP)
    $Button1 = GUICtrlCreateButton("Button1", 1, 1, 244, 244,$BS_BITMAP)
    GUICtrlSetImage (-1, "SPSconnectD3.bmp")
    GuiSetState(@SW_HIDE, $Form1)
    WinSetOnTop ( "Form1", "", 1)

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

    #EndRegion ### END Koda GUI section ###

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

    DIM $temp[4]
    $showButton =0

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

    While 1

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

    If WinActive("WAK Service Store - WAK Bestellübersicht") Then _ShowButton()

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

    If NOT WinActive("WAK Service Store - WAK Bestellübersicht") Then _HideButton()

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1

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

    ProgressOn("SPSconnectD3", "Bitte warten ...")
    For $i = 1 to 100
    ProgressSet( $i, $i & " Prozent")
    Sleep(5)
    Next

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

    sleep(500)
    ProgressOff()

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

    MsgBox(0,"","DANKE")
    Exit

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

    EndSwitch

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

    WEnd

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

    Func _ShowButton()
    If $showButton =0 Then
    GuiSetState(@SW_SHOW, $Form1)
    $showButton =1
    EndIf

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

    $temp = WinGetPos("WAK Service Store - WAK Bestellübersicht")
    $x = $temp[2] + $temp[0] -252
    $y = $temp[3] + $temp[1] -252
    WinMove("Form1","",$x,$y)

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

    EndFunc

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

    Func _HideButton()
    If $showButton =1 Then
    GuiSetState(@SW_HIDE, $Form1)
    $showButton =0
    EndIf

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

    EndFunc

    [/autoit]

    Bin für jeden Tip dankbar.

    Einmal editiert, zuletzt von CrazyER (16. April 2012 um 17:15)

  • Sobald du deine Button-Gui einblendest ist dein Fenster ja nichtmehr aktiv wodurch deine GUI wieder ausgeblendet wird und dein Fesnter wieder aktiv wird usw.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Lass doch die GUI solange anzeigen bis der knopf gedrückt wurde und kannst das ja wieder von neuem machen :)

    §1 Ich kann nicht für meine scripts inhaftiert werden, auch wenn bereits 3 Menschen erblindeten an den Folgen der Korrekturlesung.  8o

  • So sollte es gehen:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <IE.au3>
    #include <array.au3>

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

    $x=1
    $y=1

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 244, 244, $x, $y,$WS_POPUP)
    $Button1 = GUICtrlCreateButton("Button1", 1, 1, 244, 244,$BS_BITMAP)
    GUICtrlSetImage (-1, "SPSconnectD3.bmp")
    GuiSetState(@SW_HIDE, $Form1)
    WinSetOnTop ( "Form1", "", 1)

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

    #EndRegion ### END Koda GUI section ###

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

    DIM $temp[4]
    $showButton =0

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

    While 1

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

    If WinActive("WAK Service Store - WAK Bestellübersicht") Then _ShowButton()

    If Not WinActive("WAK Service Store - WAK Bestellübersicht") AND Not WinActive("Form1") Then
    _HideButton()
    EndIf

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

    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Button1

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

    ProgressOn("SPSconnectD3", "Bitte warten ...")
    For $i = 1 to 100
    ProgressSet( $i, $i & " Prozent")
    Sleep(5)
    Next

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

    sleep(500)
    ProgressOff()

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

    MsgBox(0,"","DANKE")
    Exit

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

    EndSwitch

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

    WEnd

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

    Func _ShowButton()
    If $showButton =0 Then
    GuiSetState(@SW_SHOW, $Form1)
    $showButton =1
    EndIf

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

    $temp = WinGetPos("WAK Service Store - WAK Bestellübersicht")
    $x = $temp[2] + $temp[0] -252
    $y = $temp[3] + $temp[1] -252
    WinMove("Form1","",$x,$y)

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

    EndFunc

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

    Func _HideButton()
    If $showButton =1 Then
    GuiSetState(@SW_HIDE, $Form1)
    $showButton =0
    EndIf

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

    EndFunc

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • chip danke, funktioniert ;o)

    autoBert das hatte ich mir auch schon angeschaut, aber der Button soll sich über eine IE Seite UND auf eine Anwendung legen. Hab auch schon einen Button in das IE Fenster mit _IEBodyWrite eingebaut, aber dann funktionieren alle anderen Links auf der Seite nicht mehr, weil diese dynamisch aufgebaut ist. Bin da auch kein Spezialist drin, daher scheint diese Lösung für mich momentan am einfachsten zu sein.