Wie kann ich auslesen ob eine Taste "gedrückt wurde" - nicht ob sie "gedrückt ist"

  • Gibt es eine Funktion mit der ich auslesen kann ob eine Taste gedrückt wurde? Also das KeyDown Event.

    Diese soll halt nur dann eine 1 zurückgeben wenn die Taste gedrückt wurde, wenn diese aber gehalten wird soll dann eine 0 zurückgegeben werden.

    Einmal editiert, zuletzt von hundi (22. März 2009 um 19:17)

  • Ne die hilft nicht.

    Wie gesagt ich will nicht auslesen ob eine Taste gedrückt IST sondern ob sie gerade gedrückt WURDE.

    Ums also in Bits zu sagen. Ich brauch etwas was mir die Flanke von 0 auf 1 ausließt und nicht etwas was mir die 1 ausließt.

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

    If _IsPressed("XY") Then

    While _IsPressed("XY")

    Sleep(10)

    WEnd

    EndIf

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

    Man sollte halt ein bischen selbst grübeln ;)

    Ich geb nur ungern Komplettlösungen an, man lern am meisten wenn man etwas selbst löst.

    "Never touch a running System!"

  • Das Programm soll dann ja nicht schlafen.. ^^

    Ne aber ich hab schon selber rumprobiert:

    [autoit]


    $is_actually_pressed = False

    While 1
    Select
    Case _isPressed("iwas") And $is_actually_pressed = False
    $is_actually_pressed = True
    ;hier wird was ausgeführt
    Case Not _isPressed("iwas")
    $is_actually_pressed = False

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

    EndSelect
    WEnd

    [/autoit]


    Hier hab ich nur große Probleme mit den "Case Not" Anweisungen.
    Dort wird iwie die Case-Anweisung unterbrochen und neu gestartet oder iwie sowas. Habs noch nicht genau herausgefunden.
    Wenn ich einmal eine Taste betätigt habe wird der Code ausgeführt, wenn ich sie nochmal betätige passiert nichts mehr. :(

  • dann mach es doch so:

    Spoiler anzeigen
    [autoit]

    $is_actually_pressed = False

    While 1
    Select
    Case _isPressed("iwas") And $is_actually_pressed = False
    $is_actually_pressed = True
    ;hier wird was ausgeführt
    Case Else
    $is_actually_pressed = False

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

    EndSelect
    WEnd

    [/autoit]

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Ich glaube du hast meinen Code falsch verstanden.

    Sobald die Taste gedrückt wird, führt er einen Befehl aus und danach
    wartet er bis die Taste losgelassen wird! (das wolltest du doch)
    Sleep(10) sind 10 ms, da schläft er nicht wirklich ;)

    [autoit]

    While $Programm_laueft

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

    If _IsPressed("XY") Then

    ;ZÄHLE HOCH oder tu was anderes

    While _IsPressed("XY")

    Sleep(10)

    WEnd

    EndIf

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

    WEnd

    [/autoit]

    "Never touch a running System!"

  • [autoit]

    $key = 26 ;~ Pfeil_Oben_Taste
    $a_R = DllCall("user32.dll", "int", "GetAsyncKeyState", "int", '0x'&$key)
    MsgBox( 0, "Tastenstatus:", $a_r[0])

    [/autoit]

    also die funktion die mit dem DLLCall aufgerufen wird gibt folgendes zurück:
    0=Taste Wurde nicht gedrückt
    1=Taste wurde seit letztem aufruf der Funktion gedrückt, IST GERADE ABER NICHT GEDRÜCKT
    Negative Zahl=Taste ist MOMENTAN gedrückt

    ich hoffe das hilft dir weiter

    Canyon

  • Schnuffel: Das mit dem Else hab ich noch nicht probiert.. Werde mal schaun.

    Prajoss: Stimmt, hab ich falsch gelesen^^ Das müsste so funktionieren.

    @Canyon: Das muss ich mir noch mal genau anschaun^^

  • jo, lass dir zeit.

    ich hab eigendlich auch nur die funktion im misc.au3 include angeschaut und verändert, weil _ispressed ja nur 0 und 1 zurückgeben kann ;)

    lg
    Canyon

  • Ich hab jetzt die while Methode genommen.. Ging am einfachsten.

    @Canyon: Diese Funktion werde ich dann warscheinlich ab jetzt immer verwenden^^