Wie kann ALT+Click festgestellt werden?

  • Hallo,
    gibt es eine Möglichkeit, in einem GUI (mit diversen Buttons) festzustellen, ob beim Click auf den Button gleichzeitig die ALT Taste gedrückt war?
    Im nachfolgenden Code Fragment wir beim Click auf eine Button mit Handle "$h_copy" der entsprechende Event ausgeliefert und die Message Box
    ausgegeben. Hat Windows den Keyboard Status zum Zeitpunkt des Clicks irgendwo, und wie komme ich da ran?

    GUISetState()
    ; Process dialogue interactions
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $h_Exit
    Exit
    Case $msg = $h_copy
    Msgbox(0, "Button pressed", "Copy", 2)
    ; ...
    WEnd 

    Danke.

    Einmal editiert, zuletzt von view42 (10. Juli 2008 um 09:30)

  • Hi,
    /Edit: Ich versteh jetzt nicht mehr so genau wie das gemeint war bzw. was du mcahne willst. Vielleicht kannste mir das ja noch kurz erklären, ansonsten benutzt die antwort von GtaSpider, der wirds schon so haben, wie du gedacht hattest :) .

    Spoiler anzeigen
    Zitat

    die ALT Taste gedrückt war?

    Ich verstehe nicht, warum gedrückt war. Ich glaube du siehst das aus der falschen Perspektive.
    Du musst prüfen ob beim Klick die Taste ALT gedrückt ist.

    Das machst du mit _Ispressed.

    [autoit]

    Case $msg = $h_copy
    Msgbox(0, "Button pressed", "Copy", 2)
    if _IsPressed(12) then
    MsgBox(0,"","ALt wurde gleichzeitig gedrückt")
    Else
    Msgbox(0,"","Alt wurde nicht gleichzeitig gedrückt")
    EndIf

    [/autoit]

    Aber du musst noch an das Include am Anfang denken!

    [autoit]

    #include <misc.au3>

    [/autoit]

    Einmal editiert, zuletzt von anno2008 (30. Juni 2008 um 19:53)

    • Offizieller Beitrag

    Hallo

    Voilá:

    Spoiler anzeigen
    [autoit]

    #include<GUIConstantsEx.au3>
    #include<Misc.au3>

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

    ;GuiCreate usw..

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

    GUISetState()
    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE,$h_exit
    Exit
    Case $GUI_EVENT_PRIMARYDOWN
    $bAlt = False
    If _IsPressed(12) Then $bAlt = True
    Case $h_copy
    If $bAlt Then
    MsgBox(0,"","Alt wurde gedrückt")
    Else
    MsgBox(0,"","Alt wurde nicht gedrückt :(")
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    Mfg Spider

  • Hallo,
    danke für die guten Tipps - manchmal übersieht man die einfache Lösung ;)

    mfg - Tom

  • Kannst du mir jetzt vielleicht trotzdem noch erklären, wei das gemint war?
    Soll geprüft werden, ob während man auf den Button drückt ALT gedrückt ist?
    Oder soll wie bei Spiders Lösung ein 2. Button geprüft werden?
    Ich chekc das irgendwie ned.

  • Hallo,

    es war schon so gemeint, dass geprüft werden soll, ob beim Click auf einen Button gleichzeitig die ALT Taste gedrückt worden ist. Mit Spieder's Lösung kann man das tatsächlich feststellen, aber es gibt ein anderes Problem: der $GUI_EVENT_PRIMARYDOWN wird durch den Maus-Click auf den Button ausgelöst, ist aber danach weg, sodass der Button von AutoIT nachfolgend nicht als gedrückt erkannt wird. Ich müsste dann direkt nach dem Abfragen der ALT Taste die ganze Lögik selbst implementieren, die feststellt, welcher meiner Buttons gedrückt worden ist. Das war mir zu aufwändig...

    Das ursprüngliche Problem war es, beim Drücken eines Buttons auf 2 mögliche Arten zu reagieren; dazu die Unterscheigung von Click und ALT+Click.

    Dasselbe lässt sich auch erreichen, indem man zwischen Click und Rechts-Click unterscheidet. Dann wird die Lösung ganz einfach:
    Sie basiert auf Spider's Vorschlag, reagiert aber auf Event $GUI_EVENT_SECONDARYDOWN. Das Code-Fragment sieht dann so aus:

    [autoit]


    Case $GUI_EVENT_SECONDARYDOWN
    $bRightClick = True
    MouseClick ("Left")
    ContinueLoop

    Case $h_copy
    If $bRightClick Then
    MsgBox(0,"","Rechts-Click auf Button")
    Else
    MsgBox(0,"","Links-Click auf Button")
    EndIf

    [/autoit]


    Damit der Click auf den Button nicht verloren geht, wird er einfach noachmal erzeugt als Links-Click - den Rest macht AutoIT !

    Grüße, Tom

    2 Mal editiert, zuletzt von view42 (5. Juli 2008 um 19:40)

  • Mhmmm...

    Ich muss rausfinden, wie man vernünftig formatierte Code-Fragmente hier im Forum darstellt. Gibt's da irgend ein gutes Tool?