Hi,
ich möchte mit Keyboard-Hooks "Makros" ausführen / Programmieren...
Unter anderem will ich auch Tasten / Tastenkombinationen senden => was
dann zusätzlich mit Windows.Forms kein Problem ist...
Was allerdings ein Problem ist, dass wenn ich z.B. mit [Alt] + [1] den
Text "Test" an den Editor sende, dann ist ja noch die Alttaste gedrückt
und die einzelnen Buchstaben machen dann Menüaktionen :/
gut, also hab ich eben den Command erst ausgeführt als die Alt-Taste
losgelassen wurde, aber selbst da erkennt er die Alt noch... erst nach
200ms Verzögerung schreibt er auch "Test" in den editor "ohne
Menüaktionen"
nun, ich möchte aber dass das ganze einiges schneller geht. Gibt es eine
Möglichkeit die "Alt"-Taste dann zu deaktivieren oder noch besser diese
> SendKeys.SendWait
ohne die Zusätzlichen tasten wie z.B. alt? sondern lediglich das was er
senden Soll?
Ich hoffe meine Problemstellung ist klar, ggf. muss ich einfach mehr
nachliefern.
Danke
Zeig mal den Code, wo du auf [Alt] + [1] reagierst? Ist das ein KeyDown- KeyUp- Keypress-Eventhandler? Falls ja, hast du es mal mit private void control_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { // dein Code... // Event ist behandelt und muss nicht mehr weitergeleitet werden e.Handled = true; }
nein, das ist ein HookCallback welcher auf alles was ich drücke oder Loslasse Reagiere... das Problem ist, dass das Vordergrundfenster dies auch "mitbekommt"... => leider gibt es auf der Tastatur keine Taste vor der man sicher ist... zwar kann ich schon [strg] oder [alt] + "Zahlen" drücken ohne dass was passiert, aber sobald Buchstaben geschrieben werden, reagieren 80% aller Vordergrundfenster (Browser, Editor...) das ganze mach ich mit einem LowLevelKeboardProc > private static LowLevelKeyboardProc _proc = HookCallback; der Callback wird dann in Tastenzustand <- gedrückt / losgelassen & welche Taste aufgesplittet... > private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) aber wie schon erwähnt, der Keyboard-Hook fängt keine eingaben ab, sondern schreibt diese nur mit (könnte man fast schon nen Keylogger draus bauen :-) )... Ich will aber in der Tat, diverse Tasten "abfangen" <- idealerweise nur zu bestimmten Zeiten => und zwar genau dann wenn der Hook, nicht mitliest sondern selbst aktiv schreibt! <- damit "persönliche" Eingaben nicht die Ausgabe Stören ... theoretisch könnte man sogar die ganze Tastatur deaktivieren... <- aber diese "idee" ist auch gefährlich, immerhin soll man notfalls noch abrechen oder andersweitig Aggieren können... > Habe im Internet ein Tool gefunden (MapKeyboard) mit welchen man die Tasten umbelegen kann... allerdings macht er das in der Regedit und das wiederum erst nach einem Relog <- was dann wieder nicht temporär wäre...
Waldi schrieb: > das ganze mach ich mit einem LowLevelKeboardProc https://www.codeproject.com/Articles/14485/Low-level-Windows-API-hooks-from-C-to-stop-unwante Da müsste an Funktionen alles dabei sein. - Vorallem der Teil in der Mitte der Seite...
1 | private const int WM_KEYUP = 0x0101; |
2 | private const int WM_SYSKEYUP = 0x0105; |
3 | |
4 | private IntPtr HookCallback(int nCode, IntPtr wParam, ref KBDLLHOOKSTRUCT lParam) |
5 | { |
6 | //Filter wParam for KeyUp events only - otherwise this code |
7 | //will execute twice for each keystroke (ie: on KeyDown and KeyUp) |
8 | //WM_SYSKEYUP is necessary to trap Alt-key combinations |
9 | if (nCode >= 0) |
10 | { |
11 | if (wParam == (IntPtr)WM_KEYUP || wParam == (IntPtr)WM_SYSKEYUP) |
12 | { |
13 | //Raise the event |
14 | OnKeyIntercepted(new KeyboardHookEventArgs(lParam.vkCode, AllowKey)); |
15 | } |
16 | //Return a dummy value to trap the keystroke |
17 | return (System.IntPtr)1; |
18 | } |
19 | //The event wasn't handled, pass it to next application |
20 | return CallNextHookEx(hookID, nCode, wParam, ref lParam); |
21 | } |
Einen dummy-Keystroke / bzw. das zu sendende "Makro" zurückgeben. So weit warst du sicher aber auch schon.
:
Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.