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应用程序性能的十大方法
一.返回多个数据集 检查你的访问数据库的代码,看是否存在着要返回多次的请求.每次往返降低了你的应用程序的每秒能够响应请求的次数.通过在单个数据库请求中返回多个结果集,可以减少与数据库通信的时间,使你的 ...
随机推荐
- Beta冲刺-星期三
这个作业属于哪个课程 <课程的链接> 这个作业要求在哪里 <作业要求的链接> 团队名称 Three cobblers 这个作业的目标 剩余任务预估,分配 ...
- angular js shopping
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- [WIFI插座][阅读记录][SoC][RT5350] 00.目录 RALINK AP SDK 4.1.0.0 USER’s MANUAL
来源是CSDN,百度网盘下载地址 http://pan.baidu.com/share/link?shareid=3504767505&uk=3426044377 授权声明,略过 免责声明 ...
- 读书笔记「Python编程:从入门到实践」_8.函数
8.1 定义函数 def greet_user(): # def 来告诉Python你要定义一个函数.这是函数定义 """Hello World""& ...
- mqtt-client回调方法简介
mqtt-client回调方法简介 毫无疑问Callback方式是最复杂的一种,但是其也是能够提供更好的服务,因此有必要好好研究,下面就是对使用回调方式的简单介绍: 一.在使用回调方式前,先通过MQT ...
- NOPI读取Word模板并保存
安装NPOI 可以在 程序包管理器控制台中输入 PM> Install-Package NPOI 会下载最新版本NPOI ----------------------------引用了NPOI- ...
- jquery radio、 checkbox、 select 操作
转载:http://www.haorooms.com/post/checkandselect $("input[id^='code']");//id属性以code开始的所有inpu ...
- luogu P1856 [USACO5.5]矩形周长Picture 扫描线 + 线段树
Code: #include<bits/stdc++.h> #define maxn 200007 #define inf 100005 using namespace std; void ...
- 在阿里云的ubuntu服务器上安装xampp时出现unable to realloc unable to realloc 8380000 bytes错误
在阿里云的ubuntu服务器上安装xampp时出现unable to realloc unable to realloc 8380000 bytes错误 解决:增加Swap空间(阿里云缺省没有分配任何 ...
- Coloring Flame Graphs: Code Hues
转自:http://www.brendangregg.com/blog/2017-07-30/coloring-flamegraphs-code-type.html I recently improv ...