zoukankan      html  css  js  c++  java
  • 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); }
  • 相关阅读:
    iOS: 学习笔记, Swift与C指针交互(译)
    kubernetes多节点部署的决心
    vim温馨提示
    简单工厂
    C++调用一个成员函数的需求this指针的情况
    hdoj 1226 超级password 【隐图BFS】
    Oracle Global Finanicals Technical Reference(一个)
    连载:面向对象的葵花宝典:思维、技能与实践(40)
    Android启动第三方应用程序
    BZOJ 1004 HNOI2008 Cards Burnside引理
  • 原文地址:https://www.cnblogs.com/mygod/p/2798888.html
Copyright © 2011-2022 走看看