全局快捷键设置类,文章最以下,有3种不同的使用方法(假设设置的快捷键,与其它软件的快捷键同样。那么仅仅有你的程序起作用。你释放后它才干够使用)

.h文件

#pragma once

class CHotKey

{

public:

 CHotKey(void);

 ~CHotKey(void);

public:

 //注冊全局热键

 BOOL RegisterHotKey(HWND hWnd, UINT fsModifiers, UINT vk);

//卸载全局热键

 BOOL UnRegisterHotKey(HWND hWnd);

//是否触发热键

 BOOL IsTriggerHosKey(WPARAM wParam, LPARAM lParam);

//

 virtual void ResponseKeyEvent(WPARAM wParam, LPARAM lParam);

private:

 int m_nHotKeyID;//热键ID

 HWND m_hWnd;

 UINT m_fsModifiers;

 UINT m_vk;

};

.cpp文件

#include "StdAfx.h"

#include "HotKey.h"

CHotKey::CHotKey(void)

:m_nHotKeyID(-1)

,m_hWnd(NULL)

{

}

CHotKey::~CHotKey(void)

{

 if (m_hWnd)

  UnRegisterHotKey(m_hWnd);

}

BOOL CHotKey::RegisterHotKey( HWND hWnd, UINT fsModifiers, UINT vk )

{

 m_hWnd = m_hWnd;

 m_fsModifiers = fsModifiers;

 m_vk = vk;

 m_nHotKeyID = GlobalAddAtom("MyHotKey") - 0xC000;

 return ::RegisterHotKey(hWnd,m_nHotKeyID,m_fsModifiers,m_vk);

}

BOOL CHotKey::UnRegisterHotKey(HWND hWnd)

{

 m_hWnd = NULL;

 return ::UnregisterHotKey(hWnd,m_nHotKeyID);

}

BOOL CHotKey::IsTriggerHosKey(WPARAM wParam, LPARAM lParam)

{

 if (LOWORD(lParam) == m_fsModifiers && HIWORD(lParam) == m_vk)

  return TRUE;

return FALSE;

}

void CHotKey::ResponseKeyEvent( WPARAM wParam, LPARAM lParam )

{

 if (IsTriggerHosKey(wParam,lParam))

 {

  //.....

 }

}

//使用例如以下

列1:1个系统键+1虚拟键

m_HotKey.RegisterHotKey(m_uiPaintManager.GetPaintWindow(),MOD_ALT,'S');

//收到数据处理

switch(uMsg)

 {

 case WM_HOTKEY:

  {  

   if (m_HotKey.IsTriggerHosKey(wParam,lParam))

   {

     //做事情

   }

 

  }

  break;

}

列2:2个系统键(ctrl+shit)

qq的发送消息方式

m_HotKey.RegisterHotKey(hWnd,m_nHotKeyID,MOD_SHIFT|MOD_CONTROL,0);

//收到数据处理

switch(uMsg)

 {

 case WM_HOTKEY:

  {  

   if ((GetKeyState(VK_SHIFT)<0) && (GetKeyState(VK_CONTROL)<0))

   {

     //做事情

   }

 

  }

  break;

}

列3:2个系统键+1虚拟键

m_HotKey.RegisterHotKey(hWnd,m_nHotKeyID,MOD_SHIFT|MOD_CONTROL,‘S’);

//收到数据处理

switch(uMsg)

 {

 case WM_HOTKEY:

  {  

   if ((GetKeyState(VK_SHIFT)<0) && (GetKeyState(VK_CONTROL)<0) && (HIWORD(lParam) == 'S'))

   {

     //做事情

   }

 

  }

  break;

}

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wclaccp/article/details/51143303



最新文章

  1. php使用post动态选择头像和js事件动态改变头像
  2. Java JDBC链接数据库
  3. Tomcat 6 JNDI数据源详解
  4. string转DateTime(时间格式转换)
  5. 想学习一下CSS函数
  6. 转载JSON格式化工具
  7. c/c++读取文件
  8. mysql not in、left join、IS NULL、NOT EXISTS 效率问题记录
  9. libuv 初窥--转
  10. linux_创建用户_copy远程文件_解压缩_执行
  11. node.js之express框架入门篇
  12. ArcGis Python脚本——将细碎小面合并到相邻的面积最大的面
  13. vlan 知识学习
  14. 2018软工实践K班总结
  15. plugin-barcodescanner 报错
  16. FreeRTOS创建任务
  17. ML.NET 示例:二元分类之垃圾短信检测
  18. The Last Reader Response——13-17
  19. webform非表单提交时防xss攻击
  20. google event

热门文章

  1. 京东首页原生----js制作|css动画|js动画|计时器--轮播图(好久没更新,这两天闲的蛋疼做个京东页面分辨率1366*768,919京东,适应没调!)要文件加关注找我要哦!
  2. .NEL IL实现对象深拷贝
  3. day3--深入学习命令总结
  4. js规范
  5. 逆向实战第一讲,寻找OllyDbg调试工具的Bug并修复
  6. Android Weekly Notes Issue #283
  7. Java实现归并排序和快速排序
  8. 设计模式的征途—9.组合(Composite)模式
  9. 设计模式的征途—7.适配器(Adapter)模式
  10. Quartus FFT IP核简介