RegisterHotKey函数

RegisterHotKey函数转载 RegisterHotK 实现 Alt E 的快捷键组合功能 2007 07 3009 48 问题提出 nbsp nbsp nbsp nbsp 有的程序需要自定义组合键完成一定功能 如何实现 nbsp nbsp 解决方法 nbsp nbsp nbsp nbsp RegisterHotK 函数原型及说明 nbsp nbsp nbsp nbsp BOOLRegister nbsp nbsp nbsp nbsp H

转载:

RegisterHotKey()实现Alt+E的快捷键组合功能
2007-07-30 09:48
[问题提出]

     有的程序需要自定义组合键完成一定功能,如何实现?

   [解决方法]
     RegisterHotKey函数原型及说明:
     BOOL RegisterHotKey(
     HWND hWnd,                     // 接收WM_HOTKEY的窗口句柄
     int id,                        // hot key的ID号.
     UINT fsModifiers,              // 响应那个热键.
     UINT vk                        // 与热键配合的键.

     其中:
       1)id的说明:
       id为你自己定义的一个ID值,对一个线程来讲其值必需在0x0000 – 0xBFFF范围之内,对DLL来讲其值必需在0xC000 – 0xFFFF 范围之内,在同一进程内该值必须唯一

       2)fsModifiers的取值如下:
         .MOD_ALT
         .MOD_CONTROL
         .MOD_SHIFT
         .MOD_WIN

   [程序实现]
     建立名为My的对话框工程.本例要用到 RegisterHotKey()实现Alt+E的快捷键组合功能.在调用该函数后你的进程会在ALT+E按下时比系统先得到通知.你需要处理的消息是WM_HOTKEY.
     如下:

     在MyDlg.h中:
     class CMyDlg : public CDialog
     {
          // Construction
          public:
              int m_nHotKeyID;//为你自己定义的一个hot key的ID值,在整个程序唯一.
          ……..
          protected:
              HICON m_hIcon;

          // Generated message map functions
          //{
{AFX_MSG(CMyDlg)
          virtual BOOL OnInitDialog();
          afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
          afx_msg void OnPaint();
          afx_msg HCURSOR OnQueryDragIcon();
          afx_msg LONG OnHotKey(WPARAM wParam,LPARAM lParam);//手动加入.
          //}}AFX_MSG   
          DECLARE_MESSAGE_MAP()
     };
    
     在MyDlg.cpp中:
     #define VK_D 68

     …………..
     BEGIN_MESSAGE_MAP(CMyDlg, CDialog)
          //{
{AFX_MSG_MAP(CHotKey1Dlg)
          ON_WM_SYSCOMMAND()
          ON_WM_PAINT()
          ON_WM_QUERYDRAGICON()
          ON_BN_CLICKED(IDOK, OnRegisterHotKey)
          ON_BN_CLICKED(IDCANCEL, OnUnregisterHotKey)
          ON_MESSAGE(WM_HOTKEY,OnHotKey)                      //手动加入.
          //}}AFX_MSG_MAP
     END_MESSAGE_MAP()

     BOOL CMyDlg::OnInitDialog()
     {
          CDialog::OnInitDialog();

          // Add “About…” menu item to system menu.
          m_nHotKeyID=0;
          BOOL m_isKeyRegistered = RegisterHotKey(GetSafeHwnd(),m_nHotKeyID,MOD_ALT,VK_E);
          ASSERT(m_isKeyRegistered != FALSE);
          return TRUE;   // return TRUE   unless you set the focus to a control
     }
    
     在取消按钮的事件函数中加入:
     void CMyDlg::OnCancel()
     {
          BOOL m_iskeyUnregistered = UnregisterHotKey(GetSafeHwnd(), m_nHotKeyID);
          ASSERT(m_iskeyUnregistered != FALSE);
          CDialog::OnCancel();
     }

     处理截到的组合键,并处理:
     LONG CMyDlg::OnHotKey(WPARAM wParam,LPARAM lParam)
     {
          AfxMessageBox(“你按下了组合键:Alt+E”);
          //加入相关代码.
          return 0;
     }





















































































 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/218673.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午11:43
下一篇 2026年3月17日 下午11:43


相关推荐

  • 拒做黑客跳板!OpenClaw 生产级安全部署实战(含 Docker 模板)

    拒做黑客跳板!OpenClaw 生产级安全部署实战(含 Docker 模板)

    2026年3月13日
    2
  • 用js来实现那些数据结构05(栈02-栈的应用)「建议收藏」

    上一篇文章我们一起实现了栈,那么这一篇文章我们一起来用栈解决问题。看看如何用栈来解决进制转换,平衡圆括号以及汉诺塔问题,使我们对栈有更为深入的理解。1、进制转换我们先来看看十进制如何转换成二进制,

    2022年3月25日
    45
  • 验证市场可行性(PMF)的5个步骤[通俗易懂]

    验证市场可行性(PMF)的5个步骤[通俗易懂]在增长黑客的理念中,一切的“猜想”和“创意”都是需要经过验证的,用事实来证明猜想和创意是否可行,这其实也是增长黑客的特质之一,将所有不可量化的东西转化为可量化的评估标准。比如如何证明你的创意能够成功呢?验证PMF的其中一个标准是调研你的用户,如果40%的核心用户认为缺了你的产品会很遗憾,而不是可有可无,那么这就说明找到了P/MF;PMF到底是什么呢?你可以理解为一个指标,例如40%的用户认为没…

    2022年5月23日
    50
  • 请简述MyBatis框架与Hibernate框架的区别_报告与总结的不同点

    请简述MyBatis框架与Hibernate框架的区别_报告与总结的不同点两者相同点Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。Hibernate和MyBatis都…

    2025年10月18日
    6
  • idea怎么查看maven版本_idea中maven

    idea怎么查看maven版本_idea中mavenidea查看maven版本idea查看maven版本

    2022年8月22日
    15
  • CVE-2022-23131——绕过 SAML SSO 身份验证

    CVE-2022-23131——绕过 SAML SSO 身份验证漏洞描述安全断言标记语言 SAML 是最常见的单点登录 SSO 标准之一 围绕 XML 实现 它允许身份提供者 IdP 一个能够对用户进行身份验证的实体 告诉服务提供者 SP 这里是 Zabbix 你是谁 您可以将 ZabbixWeb 前端配置为允许通过 SAML 进行用户身份验证 但默认情况下不启用它 因为它需要了解身份提供者的详细信息 这是企业部署最常见的设置 在启用 SAMLSSO 身份验证的实例上 它允许绕过身份验证并获得管理员权限 攻击者可以使用此访问权限在链接的 ZabbixSer

    2026年3月26日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号