Ispressed/Hotkeyset - 2 tasten wurden gedrückt?

  • Hi,

    ich bins mal wieder mit einem neuem Problem, bei welchem mir die SuFu auch nicht weiterhelfen konnte...Also ganz kurz gefasst ein Beispiel ....

    Wenn ich jetzt aber möchte, dass die msg erst dann kommt, wenn die taste A 2 mal ! gedrückt wurde? (bzw taste bla1 + bla2 + bla3 Ist das möglich ?

    Danke im Vorraus,

    laura

  • [autoit]


    #include <Misc.au3>
    Dim $count=0
    While True
    If _isPressed("41") Then $count += 1
    If $count=2 Then
    Msgbox(64,"info","A 2x gedrückt")
    EndIf
    Sleep(250)
    WEnd

    [/autoit]


    Edit:Verbessert

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

    Einmal editiert, zuletzt von L3viathan2142 (13. Juli 2009 um 22:39)

  • Tut mir leid, aber das geht bei mir nicht! : (

    hat sonst noch einer eine idee? nochmal zur kurzen Erläuterung: wenn zb "hallo" eingegeben wurde (einfach auf der normalen Windowsoberfläche zb, also keine AutoIt GUI..., passiert dies und das?!

    Danke ,

    laura

  • [autoit]

    #include <Misc.au3>
    Dim $count=0
    While 1
    If _isPressed(41) Then
    While _isPressed(41)
    Sleep(10)
    WEnd
    $count += 1
    EndIf
    If $count=2 Then
    Msgbox(64,"info","A 2x gedrückt")
    EndIf
    Sleep(10)
    WEnd

    [/autoit]
  • Hallo Laura,

    Zitat

    nochmal zur kurzen Erläuterung: wenn zb "hallo" eingegeben wurde (einfach auf der normalen Windowsoberfläche zb, also keine AutoIt GUI..., passiert dies und das?!

    ...das nennt man landläufig einen "Keylogger". Selbstverständlich ist das auch einfach mit AutoIt zu realisieren, aber mit Tips zu diesem Thema sollen sich andere die Finger verbrennen....
    ciao
    Andy

  • Nein, da kann ich Andy nicht zustimmen, denn ein Keylogger reagiert nicht auf bestimmte Eingaben, sondern zeichnet alle Eingaben auf.
    Ich glaube nicht, dass Laura einen Keylogger machen wollte...

    Das sollte funktionieren
    [autoit]

    #include <Misc.au3>
    Dim $count=0
    While True
    If _isPressed("41") Then $count += 1
    If $count=2 Then
    Msgbox(64,"info","A 2x gedrückt")
    $count+=2
    EndIf
    Sleep(50)
    WEnd

    [/autoit]

    Twitter: @L3viathan2142
    Benutze AutoIt persönlich nicht mehr, da ich keinen Windows-Rechner mehr besitze.

  • Hi,

    Spoiler anzeigen
    [autoit]

    ; Authors: Manadar, GarryFrost
    ; Contributor: WideBoyDixon

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

    #include <WinAPI.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    #include-once

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

    Dim $hHook
    Dim $hStub_KeyProc = DllCallbackRegister("_KeyProc", "long", "int;wparam;lparam")
    Dim $hmod = _WinAPI_GetModuleHandle(0)
    Dim $hHook = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($hStub_KeyProc), $hmod)
    Dim $buffer = ""
    Dim $hotstrings[1]
    Dim $hotfuncs[1]
    Dim $hWnd = GUICreate("")
    GUIRegisterMsg($WM_KEYDOWN, "_GUIKeyProc")

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

    ;; ==========================
    ;; This is your actual script.
    ;; ==========================

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

    ;#include <HotString.au3>

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

    HotStringSet("CallMe","examplefunction")

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

    While 1
    Sleep(10)
    WEnd

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

    Func examplefunction()
    MsgBox(0,"","lolwat!")
    EndFunc

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

    ;; ==========================
    ;; End of actual script.
    ;; The part above the start of the actual script
    ;; and below this comment
    ;; script can be put in another
    ;; file and included.
    ;; ==========================

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

    Func HotStringSet($hotstring, $func)
    _ArrayAdd($hotstrings, $hotstring)
    _ArrayAdd($hotfuncs, $func)
    EndFunc

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

    Func EvaluateKey($keycode)
    If (($keycode > 64) And ($keycode < 91)) _ ; A - Z
    Or (($keycode > 47) And ($keycode < 58)) Then ; 0 - 9
    $buffer &= Chr($keycode)
    Print($buffer)
    $a = _ArraySearch($hotstrings, $buffer)
    If ( $a >= 0 ) Then
    Call($hotfuncs[$a])
    EndIf
    ElseIf ($keycode > 159) And ($keycode < 164) Then
    Return
    Else
    $buffer = ""
    EndIf
    EndFunc ;==>EvaluateKey

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

    Func _GUIKeyProc($hWnd, $Msg, $wParam, $lParam)
    EvaluateKey(Number($wParam))
    EndFunc

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

    ;===========================================================
    ; callback function. This function must return as quickly as possible or it will stall and block user input
    ;===========================================================
    Func _KeyProc($nCode, $wParam, $lParam)
    Local $tKEYHOOKS
    $tKEYHOOKS = DllStructCreate($tagKBDLLHOOKSTRUCT, $lParam)
    If $nCode < 0 Then
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndIf
    If $wParam = $WM_KEYDOWN Then
    $vkKey = DllStructGetData($tKEYHOOKS, "vkCode")
    _WinAPI_PostMessage($hWnd, $WM_KEYDOWN, $vkKey, 0)
    EndIf
    Return _WinAPI_CallNextHookEx($hHook, $nCode, $wParam, $lParam)
    EndFunc ;==>_KeyProc

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

    Func Print($s)
    ConsoleWrite($s & @CRLF)
    EndFunc

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

    Func OnAutoItExit()
    _WinAPI_UnhookWindowsHookEx($hHook)
    DllCallbackFree($hStub_KeyProc)
    EndFunc ;==>OnAutoItExit

    [/autoit]

    Das kann ganze Wörter als Hotkey setzen...

    Quelle: Hotstring

    anno2008

  • Hallo,

    Zitat

    Ich glaube nicht, dass Laura einen Keylogger machen wollte...

    das glaube ich ehrlich gesagt auch nicht, aber es wird "immer" geloggt, bei Hotkeyset brauchen wir nicht drüber zu reden, aber wenn man "zu Fuß" eine Abfrage nach einem "Hallo irgendwo auf der Windowsoberfläche" macht, dann ist man nur EINE ZEILE von einem perfekten Keylogger entfernt.
    Eine, wie ich meine tolle Anwendung (Idee) für dieses "logging" gabs vor einiger Zeit hier im Forum. Ein User wollte in einem Spiel nach Eingabe eines (zufällig vom Spiel zugewiesenen) Heldennamens sich die optimalen von diesem Helden verwendeten Items vorlesen lassen. Also ingame den Heldennamen eingeben, und das Script liest die Items vor, die dieser Held am besten in einem Shop kaufen sollte....Link
    Mit einer Handvoll umbauten wurde daraus ein "akustischer Vokabeltrainer" für meine Tochter. Der Trainer liest die Vokabeln vor, meine Tochter schreibt und bekommt sofort die akustische Rückmeldung ob richtig oder falsch, und der Papa hat Zeit zu kochen und hört im Hintergrund mit^^.
    Keylogger sind nicht immer "böse" :thumbup:
    ciao
    Andy