VC添加全局热键

来源:互联网 发布:java文件流乱码 编辑:程序博客网 时间:2024/05/19 01:59

      最近要给升级程序做个面板输入正确的验证码就绕开验证程序,直接进行升级。现在要通过热键来呼出这个面板。

      常用的做法有两种。一种在消息循环中添加WM_HOTKEY的响应。一种是通过消息映射在ON_MESSAGE(WM_HOTKEY,我的处理函数)中做处理。

      不管是哪种,首先要定义一个系统范围的热键。方法原型是:

      BOOL WINAPI RegisterHotKey(             __in_opt HWND hWnd,            //响应消息的窗体句柄,若为NULL  则  消息映射方式的方法不会响应。             __in int id,                                //消息唯一标识    若有冲突,会导致注册失败             __in UINT fsModifiers,            //与vk一同按下的辅助键,例如CTRL  、 ALT, 对应的程序标识就是MOD_CONTROL、MOD_ALT。             __in UINT vk                           );

       其次若通过消息循环来处理热键响应  只要在窗体里实现  afx_msg BOOL PreTranslateMessage(MSG* pmsg)  就好了。
       若要通过消息映射来响应。要在
BEGIN_MESSAGE_MAP(CMFCRegisterHotKeyDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_MESSAGE(WM_HOTKEY,OnHotKey)  //  需要添加这个消息映射END_MESSAGE_MAP()

      这个代码需要注意的点 就是
       在CPP文件中 定义 热键消息的标识
       #define IDH_HOTKEY              4000       //注意不要和其他的冲突了
       在窗体的OnInitDialog()方法中 添加
       BOOL result =  ::RegisterHotKey(GetSafeHwnd(),IDH_HOTKEY,MOD_CONTROL+MOD_SHIFT,'K');  ///若 GetSafeHwnd()换成NULL ,则OnHotKey方法不会响应。
      ASSERT(result);
       在 消息循环中处理的 要添加
    
   BOOL XXXXXXX::PreTranslateMessage(MSG* pmsg){ if(pmsg->message ==WM_HOTKEY) {  if(pmsg->wParam ==IDH_HOTKEY)   AfxMessageBox(_T("热键被按下")); } switch (pmsg->message) { case WM_HOTKEY:  if(pmsg->wParam ==IDH_HOTKEY)   AfxMessageBox(_T("热键被按下"));  break; case WM_LBUTTONDOWN:  AfxMessageBox(_T("左键被按下"));  break; case WM_RBUTTONDOWN:  AfxMessageBox(_T("右键被按下"));  break; default:  break; } return CDialog ::PreTranslateMessage(pmsg);}
   在 OnHotKey中处理的 添加
LONG CMFCRegisterHotKeyDlg:: OnHotKey(WPARAM wparam,LPARAM lparam){ UINT fuModifiers = (UINT) LOWORD(lparam);  // key-modifier flags       UINT uVirtKey = (UINT) HIWORD(lparam);     // virtual-key code     if(wparam ==IDH_HOTKEY)   if(uVirtKey==VK_F8&&fuModifiers==MOD_CONTROL+MOD_SHIFT)   AfxMessageBox(_T("热键被按下"));  else if(wparam == IDH_HOTKEY1)  {   AfxMessageBox(_T("F8被按下"));  }  return 0;}




       


0 0
原创粉丝点击