全局快捷键设置类,文章最以下,有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



duilib 快捷键发送消息的更多相关文章

  1. PHP实现RTX发送消息提醒

    RTX是腾讯公司推出的企业级即时通信平台,大多数公司都在使用它,但是我们很多时候需要将自己系统或者产品的一些通知实时推送给RTX,这就需要用到RTX的服务端SDK,建议先去看看RTX的SDK开发文档( ...

  2. 【C#】给无窗口的进程发送消息

    注:本文适用.net2.0+的winform程序 一个winform程序,我希望它不能多开(但是如何防多开不是本文要讲的),那么在用户启动第二个实例的时候,作为第二个实例来说,大概可以有这么几种做法: ...

  3. 增加线程异步发送消息的方法二(Runnable)

    //获取当前时间:毫秒 long a = System.currentTimeMillis(); System.out.println("a :" + a); try { //更改 ...

  4. 增加线程异步发送消息的方法一(Thread)

    @RequestMapping(value="order/updateOrder.do") public String updateOrder(HttpServletRequest ...

  5. 一步一步来做WebQQ机器人-(五)(发送消息||完结)

    × 本篇主要是: 发送QQ消息(to:好友,群),以及对小黄鸡抓包利用它的语言库 本文是WebQQ流程的最后一章 最后一章内容不多但我还是啰嗦,可能对大部分人都已知晓的流程方法我也会介绍一下 前面几个 ...

  6. 【转载】Delphi7从子线程中发送消息到主线程触发事件执行

    在对数据库的操作时,有时要用一个子线程来进行后台的数据操作.比如说数据备份,转档什么的.在主窗口还能同是进行其它操作.而有时后台每处理一个数据文件,要向主窗口发送消息,让主窗口实时显示处理进度在窗口上 ...

  7. 【读书笔记】iOS-ARC-不要向已经释放的对象发送消息

    一,在AppDelegate.m中写入如下代码: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOpti ...

  8. Linux给指定用户或全部用户(已登录)发送消息

    在局域网络内很多时候是许多人共用一些机器,但如果多个人同时在使用同一台机器必定会发生一些冲突,比如系统的某些配置被修改,这样引起一些麻烦.那么如果在使用该机器之前,先给登录到该机器的所有其他用户发送一 ...

  9. RTX发送消息提醒实现以及注意事项

    一.RTX简介 RTX是腾讯公司推出的企业级即时通信平台.该平台定位于降低企业通信费用,增强企业内部沟通能力,改善企业与客户之间的沟通渠道,创造新兴的企业沟通文化,提高企业生产力.RTX平台的主要功能 ...

随机推荐

  1. PTA 循环单链表区间删除 (15 分)

    本题要求实现带头结点的循环单链表的创建和单链表的区间删除.L是一个带头结点的循环单链表,函数ListCreate_CL用于创建一个循环单链表,函数ListDelete_CL用于删除取值大于min小于m ...

  2. 深入理解ES6之—set与map

    Set是无重复值的有序列表.Set会自动移除重复的值,因此你可以使用它来过滤数组中重复的值并返回结果. Map是有序的键值对,其中的键允许是任何类型. Set和Map是es6新增的两个数据集合. Se ...

  3. AutoMapper IIS回收引发的 未将对象引用设置到对象实例

    一.前言 最近使用AutoMapper的时候,一段时间久会产生System.NullReferenceException:未将对象引用设置到对象的实例.这个问题.后来通过测试,发现部署在IIS上的站点 ...

  4. ajax事件请求

    首先,ajax是什么? ajax是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. ajax是一种用于创建的快速动态网页的技术. 当async:true时,表示异步执行ajax代码:当as ...

  5. python列表的一些常用方法以及函数

    学习到了一些关于python列表的新知识,自己整理了一下,方便大家参考: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # File_type:列表的常用操 ...

  6. Shiro SpringMVC 非maven HelloWorld

    项目用到Shiro就从网上找一些案例看看吧,结果看了很多都是maven的,没有办法就自己弄了一个.废话不多说,原理自己找开始上菜. 配置web.xml <?xml version="1 ...

  7. javascript函数式编程(一)

    一.引言 javascript函数式编程在最近两年来频繁的出现在大众的视野,越来越多的框架(react,angular,vue等)标榜自己使用了函数式编程的特性,好像一旦跟函数式编程沾边,就很高大上一 ...

  8. Java 8的新特性—终极版

    作者:杜琪[译] 原文链接:http://www.jianshu.com/p/5b800057f2d8 1. 简介 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本 ...

  9. python 实用案例 supervisord管理进程详解

    Supervisor是由python语言编写,基于linux操作系统的一款服务器管理工具,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能.Supervisor类似于monit,monit ...

  10. JavaScript学习笔记(十)——高阶函数之map,reduce,filter,sort

    在学习廖雪峰前辈的JavaScript教程中,遇到了一些需要注意的点,因此作为学习笔记列出来,提醒自己注意! 如果大家有需要,欢迎访问前辈的博客https://www.liaoxuefeng.com/ ...