C++ 获取窗口句柄,给窗口设置全局热键
最近没事学习了下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); }