Beim Konsum des heutigen Bonds ist mir eine lustige Idee gekommen: ich möchte meinen Computer bei jedem Tastendruck piepen lassen.
Theoretisch ginge das sicher mit einer For-SChleife und _isPressed. Das erscheint mir aber stillos.
Gibt es eine Möglichkeit, das ganze ereignisbasiert zu machen? Heißt: Wenn irgendeine Taste gedrückt wurde (nicht gedrückt ist), dann führe Funktion aus.
"_isAnyKeyPressed()"
-
- [ offen ]
-
L3viathan -
20. Dezember 2009 um 22:07 -
Geschlossen -
Erledigt
-
-
Wenn du das als funktion machen willst dann macst du einfach ner schleife die alle tasten mit _ispressed abfrägt und wenn sie das ist, dann spielst du einfach nen beep ab
Mfg
-
Wenn du das als funktion machen willst dann macst du einfach ner schleife die alle tasten mit _ispressed abfrägt und wenn sie das ist, dann spielst du einfach nen beep ab
-
Hoppla
-
- Offizieller Beitrag
Das geht mit einem Keyboard-Hook. Einfach zusätzlich zu jedem Hook deinen Beep ausführen.
-
ist kein Problem, grundsätzlich.
Leider grenzt das aufgrund der angewandten Methodik sehr an einen Keylogger, da man jede Taste dabei aufzeichnen kann.
Daher würde ich mal sagen, so ehern dein Einsatzzweck sein mag möchte ich da nicht groß supporten.Sorry
PS: einziger Tip: wie BugFix schon angedeutet hat würde ich im engl. Forum mal nach dem Begriff "hook" suchen ...
-
Ich präsentiere: den Bond-o-mat:
[autoit]#include <WinAPI.au3>
[/autoit][autoit][/autoit][autoit]
Global $hHookKeyboard, $pStub_KeyProc
$pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
$hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)While 1
[/autoit][autoit][/autoit][autoit]
Sleep(10)
WEnd
Func OnAutoITExit()
DllCallbackFree($pStub_KeyProc)
_WinAPI_UnhookWindowsHookEx($hHookKeyboard)
EndFuncFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit]
Beep(900,20)
EndFunc -
- Offizieller Beitrag
Leider grenzt das aufgrund der angewandten Methodik sehr an einen Keylogger, da man jede Taste dabei aufzeichnen kann.
Muß ich mal klar verneinen.
Nur aufgrund der Tatsache, dass man mit Autos auch Menschen totfahren kann, sind es keine Mordinstrumente.
Das hier verwendete (und von mir vorab angesprochene) Bsp. aus der Hilfe bietet keinerlei Anleitung zu illegalen Handlungen. Und wir sollten uns nicht Programmiermöglichkeiten selbst entziehen, nur weil irgendwer das zu anderen Zwecken nutzen könnte. Selbstkasteiung zum Schutze Anderer ? - Nein Danke!
Wenn jemand wirklich in Richtung Keylogger aktiv werden will, wird er sich spätestens, wenn er keine Hilfe bekommt, einen der zu Hunderten im Netz verügbaren herunterladen. -
kann das sein das der 2x Beept wenn man eine Taste Drückt
ich habe das mal umgebaut und man siet das er 2x bei einem Tastendruck _KeyProc aufruft
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>
Global $hHookKeyboard, $pStub_KeyProc
$pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
$hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)
$x = ""
While 1
Sleep(10)
WEnd
Func OnAutoITExit()
DllCallbackFree($pStub_KeyProc)
_WinAPI_UnhookWindowsHookEx($hHookKeyboard)
EndFuncFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit]
$x += 1
ConsoleWrite($x & @CR)
EndFunc -
Ja, stimmt, einmal beim drücken und einmal beim loslassen
-
so wirds nur 1x ausgegeben
[autoit]
[/autoit][autoit][/autoit][autoit]
#include <WinAPI.au3>
Global $hHookKeyboard, $pStub_KeyProc
$pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
$hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)
Global $m ,$x
While 1
Sleep(10)
WEnd
Func OnAutoITExit()
DllCallbackFree($pStub_KeyProc)
_WinAPI_UnhookWindowsHookEx($hHookKeyboard)
EndFunc ;==>OnAutoITExitFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit][autoit][/autoit][autoit][/autoit]
If $m = 2 Then
$x += 1
ConsoleWrite($x & @CR)
$m = 0
EndIf
$m += 1
EndFunc ;==>_KeyProc -
Die Info ob die Taste gedrückt oder losgelassen wurde steckt im Parameter $wParam. Damit lässt sich gezielt (nur einmal) reagieren.
-
- Offizieller Beitrag
Wenn dann so:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $hHookKeyboard, $pStub_KeyProc
$pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
$hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)
Global $m, $x
While 1
Sleep(10)
WEnd
Func OnAutoItExit()
DllCallbackFree($pStub_KeyProc)
_WinAPI_UnhookWindowsHookEx($hHookKeyboard)
EndFunc ;==>OnAutoITExitFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit]
If _WinAPI_LoWord($wParam) = 0x100 Then Beep(900, 20)
EndFunc ;==>_KeyProcIch komme unter Windows Seven leider nicht mehr unter den hochgenuss des Tones von dem internen Beeper. Da hilft auch kein Registry Hack
Gruß
Spider -
Ich komme unter Windows Seven leider nicht mehr unter den hochgenuss des Tones von dem internen Beeper. Da hilft auch kein Registry Hack
ich bin froh das das nicht mehr von internen BeeptDas stort sehr bei Rennspielen wo man ja oft 3 Tasten gleichzeitig drückt
und wenn das geschieht dan beepter und blockt das Keyboard bis man die Tasten losläst (habe deswegen mal 10€ verlohren ) -
Wenn dann so:
Spoiler anzeigen
[autoit]#include <WinAPI.au3>
[/autoit] [autoit][/autoit] [autoit]
Global $hHookKeyboard, $pStub_KeyProc
$pStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
$hHookKeyboard = _WinAPI_SetWindowsHookEx($WH_KEYBOARD_LL, DllCallbackGetPtr($pStub_KeyProc), _WinAPI_GetModuleHandle(0), 0)
Global $m, $x
While 1
Sleep(10)
WEnd
Func OnAutoItExit()
DllCallbackFree($pStub_KeyProc)
_WinAPI_UnhookWindowsHookEx($hHookKeyboard)
EndFunc ;==>OnAutoITExitFunc _KeyProc($nCode, $wParam, $lParam)
[/autoit]
If _WinAPI_LoWord($wParam) = 0x100 Then Beep(900, 20)
EndFunc ;==>_KeyProcIch komme unter Windows Seven leider nicht mehr unter den hochgenuss des Tones von dem internen Beeper. Da hilft auch kein Registry Hack
Gruß
SpiderIst denn 0x100, Loslassen oder Drücken?
-
- Offizieller Beitrag
Hallo
@m-obi: Probier es aus
Falls du es nicht rausbekommst, hier die Lösung:Spoiler anzeigen
Das kann doch wohl nicht wahr sein Einfach eine Taste 3 Sekunden drücken, und dann gucken obs beim Loslassen oder beim drücken peept
Falls du es trotzdem immer noch nicht weißt, hier die Lösung:Spoiler anzeigen
-.-
Spoiler anzeigen
ich kann das Spiel lange spielen
Spoiler anzeigen
In der Zeit hättest du das schon längst selbst austesten können
Spoiler anzeigen
Nagut, hier die Lösung:
Spoiler anzeigen
Drücken
Gruß
Spider -
Also bei mir ist es so, wenn ich eine Taste länger gedrückt halte, kommt dauernd der Beep, natürlich mit einer ganz kurzen Pause dazwischen.