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应用程序性能的十大方法
一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...
随机推荐
- CSS的常用属性(三)
静态定位 position: static (默认) 标准流 绝对定位 position: absolute 特点: 元素使用绝对定位之后,不占据原来的位置(脱标) 元素使用绝对定位,位置是从浏览器出 ...
- ASP.NET访问网络驱动器(映射磁盘)
也许很多朋友在做WEB项目的时候都会碰到这样一个需求: 当用户上传文件时,需要将上传的文件保存到另外一台专门的文件服务器. 要实现这样一个功能,有两种解决方案: 方案一.在文件服务器上新建一站点,用来 ...
- CNN结构:用于检测的CNN结构进化-结合式方法
原文链接:何恺明团队提出 Focal Loss,目标检测精度高达39.1AP,打破现有记录 呀 加入Facebook的何凯明继续优化检测CNN网络,arXiv 上发现了何恺明所在 FAIR 团 ...
- C#访问Win 32的一些尝试
使用C#调用Win 32 Api大部分情况下基本只涉及到参数类型的转变,但在遇到Win 32 Api返回LPVOID *lpBuff 时会遇到一些解析遍历难题.lpBuff为二维指针,*lpBuff是 ...
- Spring 团队开源 nohttp,尽可能不用 HTTP
Spring 团队开源 nohttp 项目,用以查找.替换和阻止 http:// 的使用. 项目是为了在可能使用 https:// 的情况下不使用到 http://,确保不会发生中间人攻击.Sprin ...
- MATLAB图形界面设计(下)
文章参考Blue Mountain https://www.cnblogs.com/BlueMountain-HaggenDazs/p/4307777.html 一.菜单设计 1.建立菜单项 (1)建 ...
- ADB 命令和monkey
一.概要 1.什么是adb? adb全称为Android Debug Bridge,就是起到调试桥的作用.顾名思义,adb就是一个debug工具. 2.adb工作原理 不是很理解?那就来看看它的工作原 ...
- eas之获取各模块系统状态信息
public void getSystemStatue() throws EASBizException, BOSException { CompanyOrgUnitInfo co ...
- codeforces 427D Match & Catch(后缀数组,字符串)
题目 参考:http://blog.csdn.net/xiefubao/article/details/24934617 题意:给两个字符串,求一个最短的子串.使得这个子串在两个字符串中出现的次数都等 ...
- [MySQL优化案例]系列 — 分页优化
通常,我们会采用ORDER BY LIMIT start, offset 的方式来进行分页查询.例如下面这个SQL: SELECT * FROM `t1` WHERE ftype=1 ORDER BY ...