znalazłem ten kod hak klawiatura, która próbuję nieco zmodyfikować do moich celów: http://blogs.msdn.com/toub/archive/2006/05/03/589423.aspxCzy mogę zmienić wejście klawiatury użytkownika?
jako przegląd, chcę mieć użytkownik naciśnie klawisz, powiedzieć „E” i mają zwrot klawiatury inną postać, "Z", do dowolnej aplikacji.
Odpowiednia metoda Zmieniłem teraz wygląda:
private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
{
if (nCode >= 0 && wParam == (IntPtr)WM_KEYDOWN)
{
//The truely typed character:
int vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
KBDLLHOOKSTRUCT replacementKey = (KBDLLHOOKSTRUCT)Marshal.PtrToStructure(lParam, typeof(KBDLLHOOKSTRUCT));
replacementKey.vkCode = 90; // char 'Z'
Marshal.StructureToPtr(replacementKey, lParam, false);
//Now changed to my set character
vkCode = Marshal.ReadInt32(lParam);
Console.WriteLine((Keys)vkCode);
}
return CallNextHookEx(_hookID, nCode, wParam, lParam);
}
Konsola poprawnie wyświetla to jako:
E
Z
T
Z
G
Z
etc.
Jednakże „E” in ostrości aplikacji nadal Typy stron zamiast „Z” . Czemu? Zmieniłem wejście haczykowatej klawiatury tak, by zawierało "Z" zamiast "E", a linie konsoli pokazują, że została ona zmieniona poprawnie!
Jak rozumiem, wywołanie return CallNextHookEx(_hookID, nCode, wParam, lParam);
powoduje wysłanie polecenia "wydrukuj teraz" do otwartej aplikacji. Czy to nie działa? Czy jest coś, co uniemożliwia mi wpisywanie postaci, którą chcę? Wiem, że aplikacje takie jak AutoHotkey pobierają klucz wejściowy, sprawdzają go i zwracają inny znak. Jak mam zrobić to samo tutaj?
Dzięki!
z ciekawości, jaka jest tego aplikacja? –
To nie jest keylogger! :) Aplikacja jest technologią wspomagającą.Pomyśl o klawiaturze telefonu iPhone; za kulisami modyfikuje kluczowy obszar, koryguje oczywiste błędy i uruchamia inny inteligentny kod, aby pomóc Ci szybciej i dokładniej pisać. Jest to podobna aplikacja, ale dla pełnych klawiatur. – cksubs