2013-01-02 66 views
2

我正在尋找一種方式來攔截的GetMessage()在外部進程呼籲WM_CHAR(僅在活動窗口,是特定的)。我很猶豫使用SetWindowsHookEx() - 我想確保儘可能多的可能修改鍵盤輸入的程序有機會首先觸發。有沒有人有什麼建議?GetMessage(WM_CHAR)重寫?確保所有其他窗口掛鉤激活

上下文:我正在構建一個應用程序,用於生成當前鍵盤佈局的視覺效果。不過,我希望儘可能使其與第三方鍵盤重新映射軟件兼容(包括用戶自制的AutoHotkey腳本等)。當通過熱鍵觸發時,我的程序將按鍵發送到活動窗口(掃描代碼+適當的虛擬鍵),該窗口應該通過其窗口過程進行處理...因此觸發基於系統範圍掛鉤的任何重新映射軟件以及具有被編程爲僅在活動應用程序內重新映射鍵......然後,我的程序將攔截產生的WM_CHAR/WM_UNICHAR/WM_DEADCHAR消息,從中重新構建鍵盤佈局。實際上,字符消息不應該到達用於輸出的活動窗口。 (爲了兼容性,我可以將它們替換爲沒有某種類型的char消息。)

P.S.對不起,這可能是可怕的禮節 - 在註冊後第一件事發布 - 但我一直在研究這個問題很多晚,現在我仍然沒有找到一個最佳的解決方案!我主要從AutoHotkey開始工作,並且我完全願意分享我爲獲得真正的當前鍵盤佈局而考慮的其他方法,但他們都有其侷限性:與重新映射軟件打好關係。

+0

我認爲我正在尋找一個解決類似微軟走彎路。我目前正在試驗使用DLL注入和IPC概念的輕量級[DetoursXS v2](http://www.gamedeception.net/threads/21803-DetourXS-v2),但我沒有真正的C++經驗,所以進展是慢。只要我有具體的東西,我會再次更新!任何建議重新:迂迴消息循環是最受歡迎的! –

回答

0

把'〜'(沒有引號)放在熱鍵前面。

這將運行您擁有的任何代碼熱鍵允許按鍵通過。

例子:

~^a:: 
MsgBox, You pressed Ctrl+a 
return