最近沒事學習了下C++,用MFC做了一個小程序:點擊應用程序窗口獲取程序句柄,給應用程序設置全局熱鍵,隱藏程序。
思路:
1. 截獲鼠標點擊事件。
2. 獲取點擊的窗口句柄。
3. 設置全局熱鍵。
4. 響應熱鍵的事件。
實現:
1. 截獲鼠標點擊事件。
使用SetCapture()將所有的鼠標消息據為己有。在捕獲過程中,你卻無法對其他的鼠標消息做出反應。ReleaseCapture()可以釋放捕獲的鼠標消息。
還有其他的捕獲鼠標的方法,可以參看:http://blog.sina.com.cn/s/blog_5c52ae1b0100bj0t.html
2. 獲取點擊的窗口句柄。
先通過BOOL GetCursorPos(LPPOINT lpPoint)獲取鼠標點擊在屏幕上的坐標,再使用win32 api函數:HWND WindowFromPoint(POINT& Point),得到當前窗口的句柄。
3. 設置全局熱鍵。
// 獲取當前窗口句柄 HWND handle = GetSafeHwnd(); //得到熱鍵的唯一標識 int HotKeyId = GlobalAddAtom('MyHotKey'); //注冊全局熱鍵Alt + F8 RegisterHotKey(handle,HotKeyId,MOD_ALT, VK_F8);
注銷熱鍵的方法:
UnRegisterHotKey(handle, HotKeyId); //注銷HotKey, 釋放資源。
4. 響應熱鍵的事件。
我重寫了窗體的PreTranslateMessage事件,已達到響應熱鍵消息的目的。
BOOL CHideAppDlg::PreTranslateMessage(MSG* pMsg) { switch (pMsg->message) { case WM_HOTKEY: int HotKeyId= pMsg->wParam;
break; } return CDialog::PreTranslateMessage(pMsg); }