Taste gedrückt

  • Hey :))

    gibts eine Funktion die Prüft wann eine Taste gedrückt wird, ohne dabei eine spezifische in betracht zu ziehen?
    also wartet und dann die gedrückte Taste zurück gibt?

    man könnte eine while-schleife nehmen und alle Tasten mit

    [autoit]


    if _isPressed($taste_xy) then

    [/autoit]


    einbinden aber das ist mühsam und sieht relativ bescheiden aus.
    ich suche ne Funktion die in etwa so funktioniert:

    [autoit]

    MsgBox(0,"Test","Gedrückte Taste:"&getPressed())
    Func getPressed()
    ;warten bis eine Taste gedrückt wurde und speichern in
    ;der Variable "die_gedrückte_taste" vom Typ String
    ;sodass man sie wieder bei HotKeys wieder verwenden kann
    Return die_gedrückte_taste
    EndFunc

    [/autoit]


    Danke Im Vorraus :)

    Einmal editiert, zuletzt von zwockel (16. Juni 2012 um 21:33)

  • Zu welchem Zweck?
    Ist 'n "bisschen" verdächtig so wie du es beschrieben hast...

    Forenregeln

  • ich möchte ein Programm schreiben, dass als Text-hilfe gilt.
    ich kann für verschiedene tasten verschiedene Strings speichern und wenn denn zum beispiel bei der taste F1
    der String "GuiCtrlRead(" gespeichert ist soll der das automatisch per Send() reinschreiben. jetzt will ich das man die tasten für die Hotkeys verändern kann.


    Jetzt wo dus sagst stimmt schon hört sich wie n bot an aber ist was harmloses um mir bei meiner Faulheit zu helfen ;)

  • wenn ich dann den Hotkey ändern will soll der nicht den Namen bsp: "NUMPAD0" eingeben sondern eine
    Taste drücken und die wird dann genommen.
    klar speicher ich die in ner INI aber ich möchte den vorgang des änderns mit
    der von mir beschriebenen Funktion machen ;)

  • Ich hab' mir CyRoX Link jetzt nicht angeguckt, jedoch könnte dir das Macro @HotKeyPressed hilfreich sein.

    [autoit]


    For $iABC = 97 To 122
    HotKeySet(Chr($iABC),"_HotKey")
    Next

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

    For $iABC = 65 To 90
    HotKeySet(Chr($iABC),"_HotKey")
    Next

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

    While Sleep(10)
    WEnd

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

    Func _HotKey()
    HotKeySet(@HotKeyPressed)
    Send(@HotKeyPressed)
    ConsoleWrite("Pressed: " & @HotKeyPressed & @CRLF)
    HotKeySet(@HotKeyPressed,"_HotKey")
    EndFunc

    [/autoit]

    lg chess

  • Danke euch 2 erstmal :)
    Werde keinen mist bauen!
    Dafür bin ich nicht hier!

    das erste Programm welches CyRox verlinkt hat ist gut aber sehr schwer für mich durchzusteigen.

    das zweite von Pitter ist auch gut aber ich weiß auch nicht wie das Funktioniert...

    Könntest du mir das erklären, bzw ausfühlich kommentieren?
    setzt er für jede taste einen Hotkey und fragt dann nur ab welcher hotkey verwendet wurde?

  • Hi,

    Zitat

    Jep, das ist nix anderes als ein Keylogger...
    Vote for close!

    in so gut wie JEDER Programmiersprache gibt es die Abfrage, welche Taste gedrückt wurde, schon im ROM-Basic des UR-PC von 1981 gab es so etwas wie

    Code
    a$=inkey$   ;in a$ steht der Tastaturcode abhängig von der eingestellten Codetabelle


    Nur AutoIt stellt da nix direktes zur Verfügung.... traurig genug übrigens.

    Allerdings gibt es reichlich Scripte zu diesem Thema, googeln nach "getkeystate site:autoit.de" hilft^^

  • aber wenn ich mich nicht vertue gibt getKeyState dtatus eines Keys zurück nicht wahr?
    dann müsste ich ja wieder für jede Taste eine eigene abfrage Starten.
    Das wäre dann ja auch wieder mit _isPressed möglich...

    verbesser mich wenns nicht so ist :D

  • ok habs jetzt mit der abänderung bzw abspeckung von dem Programm von
    sowas geschafft :)

    danke für eure Hilfen!! :)

  • Hi,

    weiss nicht, ob ich die folgende Funktion online gestellt hatte, aber so hatte ich mal die Tastatur abgefragt...
    Bis zu 6 gleichzeitig gedrückte Tasten können ermittelt werden, u.a. kann man auch die Codes der Sondertasten auf einer Tastatur herausbekommen.

    Spoiler anzeigen
    [autoit]

    $hgui = GUICreate("Tasten...", 400, 200)
    GUISetState()

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

    $label1 = GUICtrlCreateLabel("", 10, 10, 300, 30)
    $label2 = GUICtrlCreateLabel("", 10, 40, 300, 30)
    $label3 = GUICtrlCreateLabel("", 10, 70, 300, 30)

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

    GUICtrlSetData($label1, "Bitte Tasten (auch gleichzeitig) drücken")

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

    While GUIGetMsg() <> -3
    $a = _inkey() ;Tastenanzeige
    GUICtrlSetData($label2, "Taste(n) : " & $a)
    $a = _inkey(1) ;hexcodes
    GUICtrlSetData($label3, "Hexcodes : " & $a)
    WEnd

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

    Func _inkey($flag = 0) ;gibt die gleichzeitig gedrückten Tasten zurück, wenn flag=1 gibt dann tastaturcode zurück
    Global $__inkey_flag
    If $__inkey_flag = False Then ;first run
    $__inkey_flag = True
    $tastacode = "01 Left mouse button,02 Right mouse button,04 Middle mouse button (three-button mouse),05 Windows 2000/XP: X1 mouse button,06 Windows 2000/XP: X2 mouse button,08 BACKSPACE,09 TAB,0C CLEAR,0D ENTER,10 SHIFT,11 CTRL,12 ALT,13 PAUSE,14 CAPS LOCK,1B ESC,20 SPACEBAR,21 PAGE UP,22 PAGE DOWN,23 END,24 HOME,25 LEFT ARROW,26 UP ARROW,27 RIGHT ARROW,28 DOWN ARROW,29 SELECT,2A PRINT,2B EXECUTE,2C PRINT SCREEN,2D INS,2E DEL,30 0,31 1,32 2,33 3,34 4,35 5,36 6,37 7,38 8,39 9,41 A,42 B,43 C,44 D,45 E,46 F,47 G,48 H,49 I,4A J,4B K,4C L,4D M,4E N,4F O,50 P,51 Q,52 R,53 S,54 T,55 U,56 V,57 W,58 X,59 Y,5A Z,5B Left Windows,5C Right Windows,60 Numeric pad 0,61 Numeric pad 1,62 Numeric pad 2,63 Numeric pad 3,64 Numeric pad 4,65 Numeric pad 5,66 Numeric pad 6,67 Numeric pad 7,68 Numeric pad 8,69 Numeric pad 9,6A Multiply,6B Add,6C Separator,6D Subtract,6E Decimal,6F Divide,70 F1,71 F2,72 F3,73 F4,74 F5,75 F6,76 F7,77 F8,78 F9,79 F10,7A F11,7B F12,7C-7F F13 - F16,80H-87H F17 - F24,90 NUM LOCK,91 SCROLL LOCK,A0 Left SHIFT,A1 Right SHIFT,A2 Left CONTROL,A3 Right CONTROL,A4 Left MENU,A5 Right MENU,BA ;,BB =,BC ,,BD -,BE .,BF /,C0 `,DB [,DC \,DD ]"
    $a = StringSplit($tastacode, ",", 1) ;string am komma splitten
    Global $__Tasta_code[255][2], $hDLL = DllOpen("user32.dll")
    For $i = 1 To UBound($a) - 1 ;$tastacodes in Array
    $__Tasta_code[Dec(StringLeft($a[$i], 2))][1] = StringTrimLeft($a[$i], 3)
    Next
    EndIf

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

    $string = "" ;gedrückte Tasten
    For $i = 1 To 255 ;eigentlich nur bis 221
    $key = DllCall($hDLL, "short", "GetAsyncKeyState", "int", $i)
    If BitAND($key[0], 0x8000) Then ;MSB gesetzt
    If $flag Then
    $string &= "0x" & Hex($i, 2) & "+"
    Else
    If $__Tasta_code[$i][1] = "" Then $__Tasta_code[$i][1] = "unknown code=0x" & Hex($i, 2) & " ";falls Tastencode unbekannt
    $string &= $__Tasta_code[$i][1] & "+"
    EndIf
    EndIf
    Next
    $string = StringTrimRight($string, 1) ;+ am Ende entfernen
    Return $string ;string zurückgeben

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

    EndFunc ;==>_inkey

    [/autoit]
  • Bei mir geht aber unter anderem nicht ö,ä und ü. Und Wenn ich a, s, d, f, g und h drücke kommt nur a,d,f und s.

    Und warum werden bei den SHIFT- und STRG-Tasten jeweils zwei Codes ausgegeben?

  • Hi,

    Zitat

    Bei mir geht aber unter anderem nicht ö,ä und ü.

    Das sind keine TASTEN-Scancodes (Hardware) , sondern länderspezifische Sonderzeichen, diese werden ünber die installierten Codepages interpretiert! Auch ß ´ + # - . , werden je nach Tastaturtreiber unterschiedlich interpretiert.

    Zitat

    Und Wenn ich a, s, d, f, g und h drücke kommt nur a,d,f und s.

    bei mir auch....shit happens :rolleyes:

    Zitat

    Und warum werden bei den SHIFT- und STRG-Tasten jeweils zwei Codes ausgegeben?

    Naja, es werden sowohl die Codes für SHIFT (es ist ja definitiv EINE der beiden Shift-Tasten gedrückt) als auch für SHIFT LEFT oder SHIFT RIGHT ausgegeben.

    HIER gibts weitere Informationen zur Tastatur

    ciao
    Andy


    "Schlechtes Benehmen halten die Leute doch nur deswegen für eine Art Vorrecht, weil keiner ihnen aufs Maul haut." Klaus Kinski
    "Hint: Write comments after each line. So you can (better) see what your program does and what it not does. And we can see what you're thinking what your program does and we can point to the missunderstandings." A-Jay

    Wie man Fragen richtig stellt... Tutorial: Wie man Script-Fehler findet und beseitigt...X-Y-Problem

    4 Mal editiert, zuletzt von Andy (17. Juni 2012 um 11:31)