2015-12-02 86 views
1

我正在寫一個Windows程序,我需要註冊一個熱鍵。但是,我害怕RegisterHotKey()造成的衝突。有沒有辦法在沒有衝突的窗口上註冊熱鍵?

此外,當您觸發熱鍵消息時,鍵事件被阻止。例如,您致電RegisterHotkey(0, 0, MOD_NOREPEAT | MOD_ALT, VK_UP)註冊熱鍵ALT + 。如果按ALT +的explorer.exe,explorer.exe的將不會收到此消息(原文ALT +上去Explorer.exe中的水平)。

有沒有辦法註冊熱鍵沒有衝突和阻塞?

+0

如果你不想「阻塞」,那麼你不想要一個熱鍵。 「阻止」是*用於*的熱鍵。如果在窗口過程中檢查WM_CHAR消息不能滿足您的需求,請解釋您的實際要求是什麼。 –

回答

1

的MSDN頁RegisterHotKey說:

RegisterHotKey如果熱鍵指定的鍵擊 已經被另一個熱鍵註冊失敗。

連同:

返回值

類型:BOOL

如果函數成功,返回值是非零。

如果函數失敗,返回值爲零。要獲得擴展錯誤 的信息,請致電GetLastError

換句話說,if(!RegisterHotKey(...)) ... deal with error ...會趕上各種形式的「沒有工作」,包括熱鍵已在使用 - 你需要看看GetLastError告訴之間的區別「鍵已在使用」和其他。

我認爲註冊熱鍵的重點在於,無論發生什麼事情,您的應用程序總是會獲得按鍵。如果碰巧在某些其他應用程序中成爲流行鍵,它當然有點煩人,但它仍然是註冊熱鍵的關鍵。如果你不喜歡這種效果,那麼不要註冊一個熱鍵,或者使用不太可能被其他應用程序使用的更隱蔽的組合。不知道如何解決這個問題 - 如果您將IE與應用程序一起運行,並且ALT-uparrow被按下,您希望系統執行什麼操作?

+0

我希望操作系統可以讓這兩個程序識別按鍵。我很好奇AutoHotKey是如何做到的(沒有衝突)。 –

+0

我不知道AutoHotKey是或不是。但是'RegisterHotKey'的描述確實描述了它的功能和工作方式 - 並且相關的按鍵被髮送到傳遞給函數的'HWND',或者當值爲NULL時發送到當前進程。 –

+0

我認爲你使用全局鉤子來檢查所有關鍵筆劃,然後決定是否要對它們採取行動併吞下它們,對它們採取行動並讓它們通過或忽略它們。這可能是AutoHotKey所做的。 –

相關問題