使用WinAPI全局热键注册和全局模拟按键
一、全局热键注册
1、先引用DLL
[System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI
public static extern bool RegisterHotKey( //设置热键
IntPtr hWnd, // 窗口句柄,一般使用Handle属性
int id, // 区别热键的ID号,这个可以随便写,只是用来区分不同热键
uint fsModifiers, // 修正键用户接下哪些键是发生 可能为contol=2, alt=1, shift=4, windows=8或这些键的组合,如果没有的话直接用0
Keys vk // 键
);
[System.Runtime.InteropServices.DllImport("user32.dll")] //导入WinAPI
public static extern bool UnregisterHotKey( //注销热键
IntPtr hWnd, // 窗口句柄
int id // 键标识
);
2、调用函数
RegisterHotKey(Handle, 200, 0, Keys.F1); // 注册热键F1
3、此事件用来响应热键
protected override void WndProc(ref Message m)//监视Windows消息
{
const int WM_HOTKEY = 0x0312; //如果m.Msg的值为0x0312那么表示用户按下了热键
switch (m.Msg)
{
case WM_HOTKEY: ProcessHotkey(m); //按下热键时调用ProcessHotkey()函数
break;
}
base.WndProc(ref m); //将系统消息传递自父类的WndProc
}
4、判断是按了哪个热键,然后执行方法
private void ProcessHotkey(Message m) //用于控制运行窗体是否开启
{
IntPtr id = m.WParam; //IntPtr用于表示指针或句柄的平台特定类型
string sid = id.ToString(); //根据注册热键时传递的ID区分按得是哪个热键
switch (sid)
{
case "200": //code。。触发之后执行的代码
break;
}
}
二、模拟按键(全局)
1、引用API
[DllImport("user32.dll", EntryPoint = "keybd_event")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, UIntPtr dwExtraInfo);
参数1:键盘码,具体请到百度搜索键盘码
参数2:键盘扫描码,可以使用0
参数3:表示触发的键盘事件类型,比如key_up,key_down等,默认直接用0
参数4:没多大用,直接用UIntPtr.Zero就行
2、调用
byte VK_F11 = 122; //模拟按下F11键
keybd_event(VK_F11, 0, 0, UIntPtr.Zero);
使用WinAPI全局热键注册和全局模拟按键的更多相关文章
- C# register global hotkey ,onekey 注册多个全局热键以及单个全局热键
我们需要用非Hook的方法,来给我们的app 或者winform注册热键. 就像下面的 , 欧陆词典注册的一个热键F6一样, 在winform最小化的情况下,也能够全局响应热键. 这里使用系统API来 ...
- C#Winform 注册使用全局快捷键详解
C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...
- <转>MFC注册系统/全局热键。
<转>MFC注册系统/全局热键. 1. BEGIN_MESSAGE_MAP(CRS232TESTDlg, CDialog) //{{AFX_MSG_MAP(CRS232TESTDlg) O ...
- Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)
转载:http://www.cuteqt.com/blog/?p=2088 Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对 ...
- Delphi全局热键的注册
1.在窗启动时创建ATOM;(aatom:ATOM;定义在private中) then begin aatom:=GlobalAddAtom('ZWXhotKey'); end; ) then beg ...
- Qt全局热键(windows篇)
Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个 ...
- 第三方包jintellitype实现Java设置全局热键
Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...
- Qt5全局热键-QxtGlobalShortcut
最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut. 但是编译过程中发现这个库用到的QAbstrac ...
- VC添加全局热键的方法
VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...
随机推荐
- JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下)
JavaWeb三大组件(Servlet,Filter,Listener 自己整理,初学者可以借鉴一下) Reference
- (一)Knockout - 入门
knockout 简介 knockoutjs的实现依照[MVVM模式],Model-View-ViewModel. Model,用来聚合server端数据 ViewModel,描述的数据以及操作,是行 ...
- AJAX 跨域
1.说到ajax就会遇到的两个问题 1.1AJAX以何种格式来交换数据 1.自定义字符串 2.XML描述 3.JSON描述(建议使用) 1.2如 ...
- javascript字符类型操作函数
//获取字符串的长度 String.prototype.getByteLength = function() { var bytes=0,i=0; for (; i<this.length; + ...
- PHP 中const 与define 区别
1.const用于类成员变量定义,一旦定义且不能改变其值.define定义全局常量,在任何地方都可以访问. 2.define不能在类中定义而const可以. 3.const不能在条件语句中定义常量 i ...
- JVM调优总结 + jstat 分析(转)
[转] JVM调优总结 + jstat 分析 JVM调优总结 + jstat 分析 jstat -gccause pid 1 每格1毫秒输出结果jstat -gccause pid 2000 每格2秒 ...
- 类和对象:面向对象编程 - 零基础入门学习Python037
类和对象:面向对象编程 让编程改变世界 Change the world by program 经过上节课的热身,相信大家对类和对象已经有了初步的认识,但似乎还是懵懵懂懂:好像面向对象编程很厉害,但不 ...
- C#中睡眠函数Sleep
命名空间:using System.Threading; Thread.Sleep();//睡眠500毫秒,也就是0.5秒
- 标准库biset
bitset<n> b; b 有 n 位,每位都 . bitset<n> b(u); b 是 unsigned long 型 u 的一个副本. bitset<n> ...
- C语言格式化输入输出函数
一:格式输出函数printf() 1.调用形式一般为:printf("格式化控制字符串",输出表列): 2.格式化控制字符串用于指定输出格式,它有三种形式: 1.格式说明符:规定了 ...