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应用程序性能的十大方法
一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...
随机推荐
- js点击事件 注册下一步实现代码
点击事件: <body> <input type="button" id="btn1"/> <input type="b ...
- 【SQL】ROWNUM和ROWID
一.ROWNUM ROWNUM伪列是Oracle先查到结果集之后再加上去的一个伪列,这个伪列对符合条件的结果添加一个从1开始的序列号,并且序列号是从1开始增序排列的. SQL> select r ...
- SLAM: VSLAM扫盲之旅
在<机器人手册> 第2卷,这本书里面,第23章讲述了:三维视觉和基于视觉的实时定位于地图重建.在第37章里面,讲述了 同时定位与建图.指出了SLAM的三种基本方法. 一种是EKF的方法,但 ...
- .net mvc DropDownListFor下拉列表使用(验证)方法
@Html.DropDownListFor(model => model.SchoolId, new SelectList(ViewBag.SelectList, "SchoolTyp ...
- HDU_5690_快速幂,同余的性质
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Problem D ...
- POST请求成功,但接口返回数据不正确
事件:使用Jmeter做APP的搜索接口测试,请求成功了,但无论keyword是什么“内容”(这里的内容是带引号的哦),接口返回的内容都是:未匹配到搜索结果 排查问题: keyword=“世界” st ...
- eas之控制kdtable滚动条
//滚动条支持三种状态 自动 隐藏 显示 public static final int SCROLL_STATE_AUTO=0://自动根据数据判断是否显示或隐藏 public static fin ...
- Hzoi 2018.2.11多边形 区间DP
给定一个由N个顶点构成的多边形,每个顶点被赋予一个整数值,而每条边则被赋予一个符号:+(加法运算)或者*(乘法运算),所有边依次用整数1到N标识. 一个多边形的图形表示 首次移动,允许将某条边删除: ...
- Python基础练级攻略:day01
如果你有足够长时间做某事,一定会更擅长. 知识点: 计算机基础 变量 运算符 if语句 for-in循环 函数 列表.元组.字典.字符串.集合 ascii.unicode.utf-8.gbk 区别 A ...
- IDEA全局查找快捷键
双击shift