2010-04-21 63 views
1

我想寫一個應用程序,它禁用鍵盤上的某些鍵時,它正在工作。更具體地說,我對可能導致應用程序鬆散焦點的鍵很感興趣(比如ALT + TAB,WinKey,Ctrl + Shift + Esc等)。對此的需求與嬰兒/動物在鍵盤上瘋狂地抨擊有關。 :)如何禁用鍵盤上的選擇鍵?

我的第一個想法是使用SetWindowsHookEx(),但我遇到了一個問題。因爲我需要一個全局鉤子,所以這個過程必須駐留在一個.DLL中,它將被注入到所有活動的應用程序中。但.DLL可以是64位或32位,而不是兩者。在64位系統上,這兩種應用程序都有。那麼我想我必須寫兩個hook .DLL副本 - 一個用於32位,另一個用於64位。然後,我還必須啓動應用程序的兩個副本,因爲應用程序首先必須先加載DLL,然後才能將其傳遞到SetWindowsHookEx()

聽起來很笨拙和尷尬。有沒有更好的方法?或者我誤解了一些東西?

請注意,我仍然希望鼠標工作和「簡單」的字母鍵太多,所以BlockInput()不會。

加入:我可以在.NET(C#/ VB)或C/C++和WinAPI上開發。我期望後者會更合適。

+0

什麼開發平臺是您使用計劃?我相信Scott Hanselman的Babysmash(C#和WPF)做了這樣的事情.http://www.hanselman.com/babysmash/ – Lazarus 2010-04-21 14:40:48

+0

不錯!最後一個體面的嬰兒粉碎應用程序!我找不到一個!好的,這是我的「要製作的東西」列表中的一個項目。但我還有一個想法 - 只需一個軟件,它允許您選擇性地禁用鍵盤上的幾個或所有按鍵(當然不包括Ctrl-Alt-Del)。當我輸入一個只使用鼠標控制的應用程序(遊戲)時,這可能很有用,這樣我就可以將鍵盤放棄到小一點。當然,我可以拔掉鍵盤,但插在我的地方很難找到。 – 2010-04-21 14:57:17

+0

此外,它還可以幫助防止一些煩人的按鍵,如NumLock/CapsLock等。 – 2010-04-21 14:58:26

回答

1

WH_KEYBOARD_LL運行在你的進程上下文(在Win9x你必須堅持正常掛鉤,但你不必有64位問題)

+0

Are you sure? MSDN建議否則。 – 2010-04-22 08:11:06

+0

「此鉤子在安裝它的線程環境中調用」http://msdn.microsoft.com/en-us/library/ms644985(v=VS.85).aspx – Anders 2010-04-22 12:48:07

+0

不錯,我錯過了! :) – 2010-05-13 10:33:24