2010-04-18 76 views
1

我想創建一個應用程序。當用戶按下鍵盤上的特殊鍵或/並使用滾輪時,此應用程序必須執行某些操作。這個應用程序是一項服務。它沒有窗戶。我想捕捉任何與其他應用程序一起設計的鍵盤或鼠標事件。如何捕捉鍵盤和鼠標事件?

例如,您是由第三方應用程序看電視。如果按Ctrl + Shift並使用滾輪,我的應用程序將更改音量。

我使用的是Windows 7 64位和Visual Studio 2008

回答

4

您可以撥打SetWindowsHookEx()當各種事件發生的通知。您可能想使用鍵盤鉤子和鼠標鉤子來觀察鼠標事件。

+0

目前尚不清楚。我調用了'hhk = :: SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc1,0,0);'。但這不起作用。你能給我更多的信息嗎? – 2010-04-19 00:09:26

+0

使用普通鍵盤鉤子和鼠標鉤子可能會更好。低級別的鍵盤掛鉤可能被稱爲太早 - 我不確定它是否會給你所需要的信息,或不。似乎有一個從MSDN頁面鏈接的例子 - 也許這會有所幫助? – Andy 2010-04-19 02:57:11

+0

請注意,即使您沒有任何可見窗口,_LL掛鉤也需要您有GetMessage()/ DispatchMessage()循環;如果你只是睡眠()或等待...(),那麼它不會工作。既然你是在x64上,注意_LL鉤對32位和64位應用程序的工作,但正常的鉤子只得到加載到具有相同的位數的過程,所以32位進程將只能從其他活動32位進程,以及類似的64位。 – BrendanMcK 2012-11-15 12:29:05

3

如果您的應用程序是一個真正的Win32服務,然後在Vista及以後,應用程序將不會收到鍵盤或鼠標事件 - 關閉一個安全漏洞(搜索「粉碎攻擊」),微軟隔絕所有的服務,以防止他們與用戶進行交互。

你需要在會​​話應用程序運行與交互方式登錄的用戶。

2

可以使用RAW輸入法,這是比GetAsyncKeyState等

我對代碼項目,可能是使用你寫this article更可靠。

有兩個C#和MASM源代碼版本。