2011-07-21 13 views
5

Zasadniczo chcę nagrywać wszystkie kluczowe naciśnięcia (w tym nacisk klawiszy/kliknięcia klawiszy i kliknięcia myszą) i kiedy wystąpiły, dzięki czemu mogę utworzyć z nich makro.Jak nagrywać naciśnięte klawisze?

Znalazłem mnóstwo rzeczy o naciśnięciu klawiszy i WinForm lub WPF, ale tak naprawdę nie potrzebuję GUI, po prostu chcę zrzucić go na konsolę po zakończeniu przetwarzania.

Jak mogę nagrać wszystkie naciśnięcia przycisków, nawet gdy moje okno konsoli nie ma ostrości?


Przykładowe wyjście:

Send {q down} 
Sleep 98 
Send {q up} 
Sleep 4 
Send {f down} 
Sleep 102 
Send {f up} 
Sleep 43 
Send {a down} 
Sleep 26 
Send {s down} 
Sleep 111 
Send {a up} 
Sleep 18 
Send {s up} 
Sleep 17 
Send {a down} 
Sleep 62 
Send {space down} 
Sleep 72 
Send {a up} 
Sleep 5 
Send {space up} 

Korzystanie WPF teraz, ale pole wprowadzania tekstu musi być skoncentrowany. Wolę nagrywać sekwencje klawiszy, gdy jestem w grze, stąd pytanie:

+0

pisanie keyloggera? –

+1

może to pomóc: http: //msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx#Y435 –

+0

@Jesus: Przypuszczam, że kwalifikuje się jako keylogger, tak. – mpen

Odpowiedz

1

Zobacz funkcję SetWindowsHookEx. Może to służyć do monitorowania naciśnięć klawiszy w systemie.

1

Z tego co wiem, aby to osiągnąć, musisz podłączyć się do interfejsu Win32 API.

Ta project może pomóc w rozpoczęciu pracy.

1

spróbować

[DllImport("user32.dll")] 
static extern IntPtr SetWindowsHookEx 
    (int idHook, keyboardHookProc callback, IntPtr hInstance, uint threadId); 
1

Można użyć metody HwndSource.FromHwnd Metoda zwrotu HwndSource dla

okno, w którym HwndSource reprezentuje WPFcontent w oknie Win32

Następnie metoda AddHook służy do dodawania metody wywołania zwrotnego nazwie CallBackMethod,

który będzie otrzymywać wszystkie wiadomości do okna. W tym celu użyto następującego kodu:

HwndSource windowSpecificOSMessageListener = HwndSource.FromHwnd(new 
WindowInteropHelper(this).Handle); 
windowSpecificOSMessageListener.AddHook(new HwndSourceHook(CallBackMethod)); 

W metodzie oddzwaniania odbierane są wszystkie komunikaty OS tego okna.

private IntPtr CallBackMethod(IntPtr hwnd, 
int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    // msg can be WM_KEYDOWN = 0x0100, WM_KEYUP = 0x0101 and so forth. 
    // Add you code 
} 
Powiązane problemy