2011-07-21 32 views
5

基本上我想記錄每個按鍵(包括keydown/keyup和鼠標點擊)以及它們何時發生,以便我可以創建一個宏。如何記錄按鍵?

我發現了很多關於按鍵和WinForms或WPF的東西,但我並不需要GUI,我只是想在完成處理後將它轉儲到控制檯。

那麼即使當我的控制檯窗口沒有焦點時,如何記錄所有按鍵?


輸出示例:

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} 

使用WPF現在,但輸入文本字段必須集中。我寧願能夠記錄下我在遊戲中的擊鍵,因此問題:)

+0

寫一個鍵盤記錄? –

+1

這可能有幫助:http://msdn.microsoft.com/en-us/library/system.windows.forms.control.keypress.aspx#Y435 –

+0

@耶穌:我想它有資格作爲鍵盤記錄程序,是的。 – mpen

回答

1

據我所知,爲了達到這個目的,你需要掛鉤到Win32 API。

project可能會幫助您開始。

1

試試這個

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

您可以使用HwndSource.FromHwnd方法返回HwndSource

一個窗口,HwndSource表示一個Win32窗口內WPFcontent

然後用於AddHook方法添加名爲CallBackMethod的回調方法,

這將接收窗口的所有消息。爲此,使用了以下代碼:

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

在回調方法中,收到了此窗口特定的所有OS消息。

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 
} 
相關問題