Clickzähler

  • Sehr geehrte Damen und Herren :D

    Ich bin dabei, ein Skript zu schreiben, welches mir in einem GUI anzeigt, wieviele Linksclicks ich getätigt habe.
    Nur irgendwie klappt das vorne und hinten nicht. Mein Code sieht folgendermassen aus:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    Global $counts
    GUICreate ("Helping Tool", 250, 250, 190, 280)
    GUICtrlCreateLabel ("Clicks: ", 15, 15, 35, 17)
    GUICtrlCreateLabel (" " & $counts, 64, 15, 57, 17)
    GUISetState(@SW_SHOW)

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

    While 1=1
    $msg = GUIGetMsg()
    If $msg = -3 Then
    Exit
    EndIf

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

    If MouseDown ("left") = True Then
    $counts = $counts + 1
    EndIf
    WEnd

    [/autoit]

    Das Ergebnis ist: Das GUI bleibt an meiner Maus kleben, bis ich ESC drücke.
    Bei Linksclick geschieht: Nix.

    Findet einer von Euch den Fehler? Was läuft wo falsch ab?

    MfG
    Mowgli

    Einmal editiert, zuletzt von Mowgli (10. Februar 2014 um 22:11)

  • Du verwechselst da was!
    MouseDown() bewirkt, dass die gewählte Taste gedrückt und gehalten wird bis MouseUp() aufgerufen wird.
    Deshalb bleibt auch die GUI an der Maus kleben. :)

    Am besten du verwendest _IsPressed() oder GUIGetCursorInfo um abzufragen ob die Maustaste gedrückt ist.

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    Global $iCounts, $idC
    GUICreate ('Helping Tool', 250, 250, 190, 280)
    $idC = GUICtrlCreateLabel ('Clicks: ', 15, 15, 100, 17)
    GUISetState()

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

    While True
    If GUIGetMsg() = -3 Then Exit

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

    If _IsPressed('01') Then
    While _IsPressed('01') And Sleep(10)
    WEnd
    $iCounts += 1
    GUICtrlSetData($idC, 'Clicks: ' & $iCounts)
    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Yjuq (10. Februar 2014 um 21:25)

  • Kurz mal was gebastelt:
    (geht sicherlich auch eleganter aber sollte zur Veranschaulichung reichen)

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>

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

    Global $iCount, $bClicked
    $hGUI = GUICreate ("Helping Tool", 250, 250, 190, 280)
    GUICtrlCreateLabel ("Clicks: ", 15, 15, 35, 17)
    $hLabel_Clicks = GUICtrlCreateLabel ("", 64, 15, 57, 17)
    GUISetState(@SW_SHOW)

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

    While 1
    $msg = GUIGetMsg()
    If $msg = -3 Then
    Exit
    EndIf

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

    _Variante_1()
    ;~ _Variante_2()

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

    WEnd

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

    Func _Variante_1()
    If _IsPressed(01) Then
    While _IsPressed(01)
    Sleep(10)
    WEnd
    $iCount += 1
    GUICtrlSetData($hLabel_Clicks, $iCount)
    EndIf
    EndFunc

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

    Func _Variante_2()
    Local $aCI = GUIGetCursorInfo($hGUI)
    If IsArray($aCI) Then
    If $aCI[2] = 1 And $bClicked = False Then
    $iCount += 1
    GUICtrlSetData($hLabel_Clicks, $iCount)
    $bClicked = True
    ElseIf $aCI[2] = 0 Then
    $bClicked = False
    EndIf
    EndIf
    EndFunc

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!