c#为程序添加全局热键的方法
在程序失去焦点或者在后台运行时,可以通过使用全局热键的方式,进行一些快捷的操作,如QQ默认操作中ctrl+alt+A调出截图功能。
在Windows中实现热键功能需要使用win32的Api函数RegisterHotKey和UnregisterHotKey。
实现代码:
一、注册热键:
- 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键无法进行注册,有可能是系统占用。(如有误,还请路过的高手指教);
c#为程序添加全局热键的方法的更多相关文章
- VC添加全局热键的方法
VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...
- Linux将程序添加到服务的方法(通用)
一:咱们通过这篇文章来演示怎么将某个程序作为服务(就类似Windows服务可以开机自动启动),这里以tomcat为例,已经亲测过: 二:步骤(最好用root用户来做这种事情,切换root用户记得su ...
- 让程序只运行一个实例(Delphi篇)(三种方法,其中使用全局原子的方法比较有意思)
Windows 下一个典型的特征就是多任务,我们可以同时打开多个窗口进行操作,也可以同时运行程序的多个实例,比如可以打开许多个资源管理器进行文件的移动复制操作.但有时出于某种考虑(比如安全性),我们要 ...
- Java设置全局热键——第三方包jintellitype实现
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C/C++的javaer来说,有点困难.不过幸好,国外有人已经实 ...
- 第三方包jintellitype实现Java设置全局热键
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...
- 安装程序添加iis的方法经验分享
原文:安装程序添加iis的方法经验分享 网上有一些这样的方法,但我这里主要做一些对比和扩充 网上这方面的文章的岁数比较大,server 08R2和win7出来后,整理这方面的资料的文章没找到,所以这里 ...
- Qt5全局热键-QxtGlobalShortcut
最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut. 但是编译过程中发现这个库用到的QAbstrac ...
- 改善C#程序,提高程序运行效率的50种方法
改善C#程序,提高程序运行效率的50种方法 转自:http://blog.sina.com.cn/s/blog_6f7a7fb501017p8a.html 一.用属性代替可访问的字段 1..NET ...
- 提高ASP.NET应用程序性能的十大方法
一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...
随机推荐
- React Component(dva)
Stateless Functional Components(3种方式) class App extends React.Component function App() const App= Re ...
- 用DIV遮罩解决checkbox勾选无效的问题
在前端开发的过程中,遇到一种情况,需要勾选,为了用户的操作便捷就将click事件放到了DIV上.(其中使用了knockout.js) 代码大概如下: <div id="one" ...
- Hive2.1.1集群搭建
软件环境: linux系统: CentOS6.7 Hadoop版本: 2.6.5 zookeeper版本: 3.4.8 主机配置: 一共m1, m2, m3这五部机, 每部主机的用户名都为centos ...
- css3基础篇三
CSS3 文本阴影 在 CSS3 中,text-shadow 可向文本应用阴影. 您能够规定水平阴影.垂直阴影.模糊距离,以及阴影的颜色: 实例 向标题添加阴影: h1 { text-shadow: ...
- TimerTask定时任务
web.xml <listener> <listener-class>com.sign.listener.NFDFlightDataTaskListener</liste ...
- Python这些问题你会吗?
inal作用域的代码一定会被执行吗? 正常的情况下,finally作用域的代码一定会被执行的,不管是否发生异常.哪怕是调用了sys.exit函数,finally也是会被执行的,那怎么样才能让final ...
- centos6.5 安装Python3.6.0
首先安装python3.6可能使用的依赖 # yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel ...
- 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 ...
- 日记——OI历程
学OI也一年多了(2015.12-),一直没学出个像样的东西.相比dalao们,我还是弱爆了. ljj,qyf,yyf三位三区dalao. xxy,myj两位三区学长dalao. 稍微总结一下前一段时 ...
- 洛谷P1316 丢瓶盖【二分+递推】
陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出格式 输入 ...