一、全局热键注册

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全局热键注册和全局模拟按键的更多相关文章

  1. C# register global hotkey ,onekey 注册多个全局热键以及单个全局热键

    我们需要用非Hook的方法,来给我们的app 或者winform注册热键. 就像下面的 , 欧陆词典注册的一个热键F6一样, 在winform最小化的情况下,也能够全局响应热键. 这里使用系统API来 ...

  2. C#Winform 注册使用全局快捷键详解

    C#.NET Winform 注册使用全局快捷键详解 借助于全局快捷键,用户可以在任何地方操控程序,触发对应的功能.但 WinForms 框架并没有提供全局快捷键的功能.想要实现全局快捷键需要跟 Wi ...

  3. <转>MFC注册系统/全局热键。

    <转>MFC注册系统/全局热键. 1. BEGIN_MESSAGE_MAP(CRS232TESTDlg, CDialog) //{{AFX_MSG_MAP(CRS232TESTDlg) O ...

  4. Qt全局热键(windows篇)(使用RegisterHotKey和句柄进行注册)

    转载:http://www.cuteqt.com/blog/?p=2088 Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对 ...

  5. Delphi全局热键的注册

    1.在窗启动时创建ATOM;(aatom:ATOM;定义在private中) then begin aatom:=GlobalAddAtom('ZWXhotKey'); end; ) then beg ...

  6. Qt全局热键(windows篇)

      Qt对于系统底层,一直没有很好的支持,例如串口并口通信,还有我们经常都会用到的全局热键,等等.既然Qt可能出于某种原因,不对这些进行支持,我们就只能自己写代码,调用系统相关的API了. 注意,这个 ...

  7. 第三方包jintellitype实现Java设置全局热键

    Java原生API并不支持为应用程序设置全局热键.要实现全局热键,需要用JNI方式实现,这就涉及到编写C/C++代码,这对于大多数不熟悉C /C++的javaer来说,有点困难.不过幸好,国外有人已经 ...

  8. Qt5全局热键-QxtGlobalShortcut

    最近做一个项目需要注册全局热键,在网上搜索发现有个第三方库 libqxt 中给出一个比较好的跨平台的解决方案,就是 QxtGlobalShortcut. 但是编译过程中发现这个库用到的QAbstrac ...

  9. VC添加全局热键的方法

    VC添加全局热键的方法 这个方法靠谱 http://blog.csdn.net/lujianfeiccie2009/article/details/7498704 VC添加全局热键的方法 标签: bu ...

随机推荐

  1. css实现ie6以上文字高度未知垂直居中

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...

  2. (转)jQuery Validation Plugin客户端表单证验插件

    jQuery Validation Plugin客户端表单验证插件 官方文档:http://jqueryvalidation.org/documentation/ 官方demo:http://jque ...

  3. (转)url重写

    使用URLRewriter.dll后,根本不需要使用任何代码,我之前做的项目就是用的做URL重写的,其实不是进化,其实表面上看是.html扩展名而已,当然你还可以用其他的任意扩展名下面是你的配置 &l ...

  4. Android(通用机能)

    数据存储 本地数据存在都是私有化的. 共享方法1是构造数据源组件.方法2将数据放入扩展存储设备. Mashup 服务组件默认没有运行在独立进程或线程中,因此费时操作一般需要起线程.可配置指定新进程. ...

  5. java优势

    跨平台,只要有JVM(Java虚拟机)的操作系统就可以运行JAVA程序: 安全: 弃用危险的指针: 自动内在管理机制,垃圾回收机制,由垃圾回收器回收,减轻程序负担,也避免了手动回收的危险性: 完全面向 ...

  6. iOS ui界面vtf 开发

    addConstraints 添加约束的步奏 添加控件到view中 设置translateResizeLayoutintoautolayout = false 添加约束 注意 约束 : 出现 有父子关 ...

  7. ionic开发ios app

    注意必须是mac系统 1. 首先要安装node环境,Ionic的安装和后续的许多前端工具的安装都依赖于node的包管理器npm. nodeJs环境的安装很简单,去官网下载最新版的NodeJs直接安装即 ...

  8. shell中对于命令的搜寻顺序

    当你在shell命令行输入一条命令时,shell的搜寻顺序是如何的呢?当你的脚本名字和shell中的函数名字重名,shell是如何决定运行哪一个的? 在shell中,shell对于命令的搜寻优先级为: ...

  9. struts2中<s:select/>标签的运用详解

    <s:select list="smsTypes" listKey="SmsTypeId" listValue="SmsTypeName&quo ...

  10. curl抓取信息

    <?php $hotel = new curl(false,0); $str = $hotel -> post("http://www.todayinns.com/login.p ...