在程序失去焦点或者在后台运行时,可以通过使用全局热键的方式,进行一些快捷的操作,如QQ默认操作中ctrl+alt+A调出截图功能。

在Windows中实现热键功能需要使用win32的Api函数RegisterHotKey和UnregisterHotKey。

示例Demo(含代码)

实现代码:

一、注册热键:

     public class HotKey
{
//============= 1、声明注册热键的方法 ==================
[DllImport("user32.dll", EntryPoint = "RegisterHotKey")]
private static extern int RegisterHotKey(IntPtr hWnd, int nID, int nModifiers, int nVK); [DllImport("user32.dll", EntryPoint = "RegisterHotKey")]
private static extern int RegisterHotKey(IntPtr hWnd, int nID, int nModifiers, Keys VK); [DllImport("user32.dll", EntryPoint = "UnregisterHotKey")]
private static extern int UnregisterHotKey(IntPtr hWnd, int nID); //============= 2、声明组合键常量 ========================
public const int MOD_NONE = ;
public const int MOD_ALT = ;
public const int MOD_CTRL = ;
public const int MOD_SHIFT = ; public enum MOD
{
MOD_NONE = ,
MOD_ALT = ,
MOD_CTRL = ,
MOD_SHIFT = ,
MOD_WIN =
} //============= 3、实现注册热键的方法 ==================== /// <summary>
/// 注册热键
/// </summary>
/// <param name="hWnd">窗口句柄</param>
/// <param name="nID">热键标识</param>
/// <param name="modKey">组合键</param>
/// <param name="nVK">热键</param>
/// <returns></returns>
public static bool RegHotKey(IntPtr hWnd, int nID, int modKey, int nVK)
{
//========== 3.1、先释放该窗口句柄下具有相同标识的热键 =============
UnregisterHotKey(hWnd, nID); //========== 3.2、注册热键 =========================================
int nResult = RegisterHotKey(hWnd, nID, modKey, nVK); //========== 3.3、返回注册结果 =====================================
return nResult != ? true : false;
}

注册热键

二、在调用热键的窗口程序中,重写WndProc方法响应热键:

         private const int nHotKeyID = 0xabcd;           //热键标识
/// <summary>
/// 重写WndProc响应热键方法
/// </summary>
/// <param name="m"></param>
protected override void WndProc(ref Message m)
{
switch (m.WParam.ToInt32())
{
case nHotKeyID:
Method(); //热键调用的方法
break;
} base.WndProc(ref m);
}

响应热键

全局热键的注册工作完成,还有一些需要注意的方面:

1、关于定义热键的标识符,引用程序必须定义一个0X0000-0xBFFF范围的值;

2、经测试,F12键无法进行注册,有可能是系统占用。(如有误,还请路过的高手指教);

附上示例Demo(含代码)

最新文章

  1. [NodeJS] 优缺点及适用场景讨论
  2. [.NET] 怎样使用 async &amp; await 一步步将同步代码转换为异步编程
  3. CentOS6.7安装RabbitMQ3.6.5
  4. Onvif设备Rtsp地址解析和播放
  5. Linux C相关基础
  6. 如何知道使用的是哪种shell?
  7. Windows Azure 云服务角色架构
  8. IOS 100 - level2 Boss
  9. sql server 2008 跨服务器查询
  10. VB断点大全
  11. LINUX进程上锁查看方法
  12. 并归排序 (Java版本,时间复杂度为O(n))
  13. Java开发知识之Java的正则表达式
  14. oracle数据库误删的表以及表中记录的恢复
  15. [USACO5.3]校园网Network of Schools
  16. Mac下,如何把项目托管到github
  17. flask表单
  18. 前端的icon处理
  19. Linux下源码编译安装PostgreSQL数据库
  20. KMP算法的next函数求解和分析过程

热门文章

  1. Leetcode0100--Same Tree 相同树
  2. Node.js 常用Mongoose方法
  3. BZOJ 3012: [Usaco2012 Dec]First! 字典树 + tarjan
  4. vue 中引入Jquery插件
  5. S-HR系统流程
  6. 【剑指Offer】5、用两个栈实现队列
  7. 获取url
  8. (C/C++学习)2.C语言中文件流操作基本函数总结
  9. 当svn检出项目检出一半时停止,如何继续检出
  10. PHP和zookeeper结合实践