C++ 获取窗口句柄,给窗口设置全局热键

最近没事学习了下C++,用MFC做了一个小程序:点击应用程序窗口获取程序句柄,给应用程序设置全局热键,隐藏程序。

思路:

1. 截获鼠标点击事件。

2. 获取点击的窗口句柄。

3. 设置全局热键。

4. 响应热键的事件。



实现:

1. 截获鼠标点击事件。

使用SetCapture()将所有的鼠标消息据为己有。在捕获过程中,你却无法对其他的鼠标消息做出反应。ReleaseCapture()可以释放捕获的鼠标消息。

还有其他的捕获鼠标的方法,可以参看:http://blog.sina.com.cn/s/blog_5c52ae1b0100bj0t.html

  1. 获取点击的窗口句柄。

    先通过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, 释放资源。
  1. 响应热键的事件。

我重写了窗体的PreTranslateMessage事件,已达到响应热键消息的目的。

BOOL CHideAppDlg::PreTranslateMessage(MSG* pMsg) 
{
    switch (pMsg->message)
    {
        case WM_HOTKEY:
        int HotKeyId= pMsg->wParam;    
        break;
    }

    return CDialog::PreTranslateMessage(pMsg);
}

原文链接: https://www.cnblogs.com/mygod/archive/2012/12/02/2798888.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/71250

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 下午2:43
下一篇 2023年2月9日 下午2:43

相关推荐