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

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

示例Demo(含代码)

实现代码:

一、注册热键:

  1. public class HotKey
  2. {
  3. //============= 1、声明注册热键的方法 ==================
  4. [DllImport("user32.dll", EntryPoint = "RegisterHotKey")]
  5. private static extern int RegisterHotKey(IntPtr hWnd, int nID, int nModifiers, int nVK);
  6.  
  7. [DllImport("user32.dll", EntryPoint = "RegisterHotKey")]
  8. private static extern int RegisterHotKey(IntPtr hWnd, int nID, int nModifiers, Keys VK);
  9.  
  10. [DllImport("user32.dll", EntryPoint = "UnregisterHotKey")]
  11. private static extern int UnregisterHotKey(IntPtr hWnd, int nID);
  12.  
  13. //============= 2、声明组合键常量 ========================
  14. public const int MOD_NONE = ;
  15. public const int MOD_ALT = ;
  16. public const int MOD_CTRL = ;
  17. public const int MOD_SHIFT = ;
  18.  
  19. public enum MOD
  20. {
  21. MOD_NONE = ,
  22. MOD_ALT = ,
  23. MOD_CTRL = ,
  24. MOD_SHIFT = ,
  25. MOD_WIN =
  26. }
  27.  
  28. //============= 3、实现注册热键的方法 ====================
  29.  
  30. /// <summary>
  31. /// 注册热键
  32. /// </summary>
  33. /// <param name="hWnd">窗口句柄</param>
  34. /// <param name="nID">热键标识</param>
  35. /// <param name="modKey">组合键</param>
  36. /// <param name="nVK">热键</param>
  37. /// <returns></returns>
  38. public static bool RegHotKey(IntPtr hWnd, int nID, int modKey, int nVK)
  39. {
  40. //========== 3.1、先释放该窗口句柄下具有相同标识的热键 =============
  41. UnregisterHotKey(hWnd, nID);
  42.  
  43. //========== 3.2、注册热键 =========================================
  44. int nResult = RegisterHotKey(hWnd, nID, modKey, nVK);
  45.  
  46. //========== 3.3、返回注册结果 =====================================
  47. return nResult != ? true : false;
  48. }

注册热键

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

  1. private const int nHotKeyID = 0xabcd; //热键标识
  2. /// <summary>
  3. /// 重写WndProc响应热键方法
  4. /// </summary>
  5. /// <param name="m"></param>
  6. protected override void WndProc(ref Message m)
  7. {
  8. switch (m.WParam.ToInt32())
  9. {
  10. case nHotKeyID:
  11. Method(); //热键调用的方法
  12. break;
  13. }
  14.  
  15. base.WndProc(ref m);
  16. }

响应热键

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

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

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

附上示例Demo(含代码)

c#为程序添加全局热键的方法的更多相关文章

  1. VC添加全局热键的方法

    VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...

  2. Linux将程序添加到服务的方法(通用)

    一:咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动),这里以tomcat为例,已经亲测过: 二:步骤(最好用root用户来做这种事情,切换root用户记得su ...

  3. 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)

    Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...

  4. Java设置全局热键——第三方包jintellitype实现

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难.不过幸好,国外有人已经实 ...

  5. 第三方包jintellitype实现Java设置全局热键

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...

  6. 安装程序添加iis的方法经验分享

    原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里 ...

  7. Qt5全局热键-QxtGlobalShortcut

    最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut. 但是编译过程中发现这个库用到的QAbstrac ...

  8. 改善C#程序,提高程序运行效率的50种方法

    改善C#程序,提高程序运行效率的50种方法   转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html 一.用属性代替可访问的字段 1..NET ...

  9. 提高ASP.NET应用程序性能的十大方法

    一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...

随机推荐

  1. React Component(dva)

    Stateless Functional Components(3种方式) class App extends React.Component function App() const App= Re ...

  2. 用DIV遮罩解决checkbox勾选无效的问题

    在前端开发的过程中,遇到一种情况,需要勾选,为了用户的操作便捷就将click事件放到了DIV上.(其中使用了knockout.js) 代码大概如下: <div id="one" ...

  3. Hive2.1.1集群搭建

    软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...

  4. css3基础篇三

    CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...

  5. TimerTask定时任务

    web.xml <listener> <listener-class>com.sign.listener.NFDFlightDataTaskListener</liste ...

  6. Python这些问题你会吗?

    inal作用域的代码一定会被执行吗? 正常的情况下,finally作用域的代码一定会被执行的,不管是否发生异常.哪怕是调用了sys.exit函数,finally也是会被执行的,那怎么样才能让final ...

  7. centos6.5 安装Python3.6.0

      首先安装python3.6可能使用的依赖 # yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...

  8. Codeforces Round #406 (Div. 2) 787-D. Legacy

    Rick and his co-workers have made a new radioactive formula and a lot of bad guys are after them. So ...

  9. 日记——OI历程

    学OI也一年多了(2015.12-),一直没学出个像样的东西.相比dalao们,我还是弱爆了. ljj,qyf,yyf三位三区dalao. xxy,myj两位三区学长dalao. 稍微总结一下前一段时 ...

  10. 洛谷P1316 丢瓶盖【二分+递推】

    陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入 ...