_WinAPI_GetAsyncKeyState Beispiel

  • Hi,
    kann mir jemand nen Beispiel zu _WinAPI_GetAsyncKeyState bitte geben?

    Hab schon einiges probiert jedoch erhalte ich immer 0 zurück.

    MfG

    Bladerunner

    Einmal editiert, zuletzt von Bladerunner85 (16. Juli 2010 um 11:50)

  • ;)

    [autoit]

    Func _IsPressed($sHexKey, $vDLL = 'user32.dll')
    ; $hexKey must be the value of one of the keys.
    ; _Is_Key_Pressed will return 0 if the key is not pressed, 1 if it is.
    Local $a_R = DllCall($vDLL, "short", "GetAsyncKeyState", "int", '0x' & $sHexKey)
    If @error Then Return SetError(@error, @extended, False)
    Return BitAND($a_R[0], 0x8000) <> 0
    EndFunc ;==>_IsPressed

    [/autoit]
  • [autoit]


    Func _WinAPI_GetAsyncKeyState($iKey)
    Local $aResult = DllCall("user32.dll", "short", "GetAsyncKeyState", "int", $iKey)
    If @error Then Return SetError(@error, @extended, 0)
    Return $aResult[0]
    EndFunc ;==>_WinAPI_GetAsyncKeyState

    [/autoit]


    Die gleiche DLL und Funktion wird aufgerufen, _IsPressed benutzt eigentlich _WinAPI_GetAsyncKeyState
    (bzw. _IsPressed ist eine Erweiterung die 1 und 0 zurückgibt statt 0 und was das andere war)

  • Danke :)

    Hab jetzt folgendes versucht:

    [autoit]


    #include <WinAPI.au3>

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

    While 1
    Sleep ( 250 )
    $uparrow = _WinAPI_GetAsyncKeyState(26)
    If Not $uparrow = 0 Then
    MsgBox(0,"Ok", "OK")
    ExitLoop
    EndIf
    WEnd

    [/autoit]

    Kann mir wer sagen warum das nicht funktioniert?

    MfG

    Bladerunner

  • Wie bei _IsPressed zu erkennen ist, musst du 0x26 anstelle von 26 verwenden.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    Local $uparrow

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

    While 1
    Sleep(250)
    $uparrow = _WinAPI_GetAsyncKeyState(0x26)
    If Not $uparrow = 0 Then
    MsgBox(0, "Ok", "OK")
    ExitLoop
    EndIf
    WEnd

    [/autoit]
  • So funktioniert :)

    Habe aber jetzt ein anderes Problem und wollt nicht extra noch eines Thread aufmachen.

    Undzwar hab ich eine Variable, angenommen $gf = "a".

    Wie kann ich dann einer andern Variable wenn $gf= "a" ist einen Wert zuweisen?

    Habs mit ner If-Schleife hinbekommen, da $gf aber viele verschiedene Werte sein kann ist dadurch das Script sehr lang und unübersichtlich.

    [autoit]


    If $gh = "a" Then
    $xx = 5
    EndIf

    [/autoit]

    Ich hoffe ich konnt es einigermasen verständlich ausdrücken.

    MfG

    Bladerunner :)

  • Wenn ich richtig verstanden habe meinst du sowas_

    [autoit]


    Switch $gf
    Case "a"
    $x = 5
    Case "b"
    $x = 6
    Endswitch

    [/autoit]
    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]