[工具-005] C#如何绑定HotKey
由于某种需要,需要做一个控制鼠标在屏幕乱点的程序,运用C#的
[DllImport("user32.dll")]
      private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo);
这个方法,我们可以实现控制鼠标的移动,单双击等功能。
但是实现之后你会发现当你启动了屏幕测试的时候,鼠标已经不受你的控制,因为鼠标到处乱跑,这个时候我想到了我们需要一个HotKey,类似于Ctrl + C 和 Ctrl + V这样的功能来让程序停止下来。下面就讲讲具体的实现方式。
我的应用场景是WinForm,我们需要在窗口激活的时候去定义HotKey
private void Form1_Activated(object sender, EventArgs e)
{
// 注册热键Ctrl+B,Id号为101。HotKey.KeyModifiers.Ctrl也可以直接使用数字2来表示。
Form1.RegisterHotKey(Handle, , Form1.KeyModifiers.Shift, Keys.S);
Form1.RegisterHotKey(Handle, , Form1.KeyModifiers.Shift, Keys.E);
}
然后获取到注册了热键之后,我们要怎么去注册热键的事件呢,我们需要重载WndProc方法
protected override void WndProc(ref Message m)
{
const int WM_HOTKEY = 0x0312;
// 按快捷键
switch (m.Msg)
{
case WM_HOTKEY:
switch (m.WParam.ToInt32())
{
case :
// 按钮点击
this.button1.PerformClick();
break;
case :
this.runFlag = false;
if (clickThread != null)
{
clickThread.Abort();
}
break;
}
break;
}
base.WndProc(ref m);
}
在程序关闭之后关闭热键,我们可以在Form_Closing事件进行关闭
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// 注销Id号为100的热键设定
Form1.UnregisterHotKey(Handle, );
// 注销Id号为101的热键设定
Form1.UnregisterHotKey(Handle, );
}
通过以上的三步我们就可以轻松的去定义热键了。
结语
- 受益,学会了如何在C#程序中定义热键
 

本站文章为宝宝巴士 SD.Team原创,转载务必在明显处注明:(作者官方网站:宝宝巴士)
转载自【宝宝巴士SuperDo团队】 原文链接: http://www.cnblogs.com/superdo/p/4544694.html
[工具-005] C#如何绑定HotKey的更多相关文章
- mysql几种性能测试的工具使用
		
mysql几种性能测试的工具使用 近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一 ...
 - iOS开发中的错误整理,关于用绑定Tag取控件的注意事项,有时候不绑定也是个错!
		
如图:红色框中是个自定义的导航工具条titlesView(没有绑定Tag),工具条中有五个按钮(按钮绑定了Tag)以及一个红色的指示器indicatorView(没有绑定Tag),下面的蓝色是可以滚动 ...
 - Cocos2d-x JSB 自己主动绑定bindings
		
Javascript Binding (简称JSB) 自己主动绑定教程. Cocos2d-x JSB 自己主动绑定bindings-generator (以下简称B-G) 使用心得 假设想弄清深入原理 ...
 - MySQL 几种性能测试的工具使用
		
近期由于要比较mysql及其分支mariadb, percona的性能,了解了几个这方面的工具,包括:mysqlslap sysbench tpcc-mysql,做一个整理,备忘,分享 1.mysql ...
 - Linux的.a、.so和.o文件 windows下obj,lib,dll,exe的关系 动态库内存管理   动态链接库搜索顺序   符号解析和绑定 strlen函数的汇编实现分析
		
Linux的.a..so和.o文件 - chlele0105的专栏 - CSDN博客 https://blog.csdn.net/chlele0105/article/details/23691147 ...
 - Atitit.ide技术原理与实践attilax总结
		
Atitit.ide技术原理与实践attilax总结 1.1. 语法着色1 1.2. 智能提示1 1.3. 类成员outline..func list1 1.4. 类型推导(type inferenc ...
 - 微信小程序产品定位及功能介绍
		
产品定位及功能介绍 微信小程序是一种全新的连接用户与服务的方式,它可以在微信内被便捷地获取和传播,同时具有出色的使用体验. 小程序注册 注册小程序帐号 在微信公众平台官网首页(mp.weixin.qq ...
 - 十大开源的.NET用户界面框架 让GUI设计不再犯难
		
选择一款合适的GUI框架是.NET开发中比较重要但又很棘手的问题,因为用户界面相当于一款应用的"门面",直接面向用户.好的UI更能吸引用户,有时甚至成为决定一款应用成败的关键.下面 ...
 - 浅谈JavaScript中的this
		
引言 JavaScript 是一种脚本语言,因此被很多人认为是简单易学的.然而情况恰恰相反,JavaScript 支持函数式编程.闭包.基于原型的继承等高级功能.本文仅采撷其中的一例:JavaScri ...
 
随机推荐
- 分治思想--快速排序解决TopK问题
			
----前言  最近一直研究算法,上个星期刷leetcode遇到从两个数组中找TopK问题,因此写下此篇,在一个数组中如何利用快速排序解决TopK问题. 先理清一个逻辑解决TopK问题→快速排序→递 ...
 - Android | 带你零代码实现安卓扫码功能
			
目录 小序 背景介绍 前期准备 开始搬运 结语 小序 这是一篇纯新手教学,本人之前没有任何安卓开发经验(尴尬),本文也不涉及任何代码就可以使用一个扫码demo,华为scankit真是新手的福音-- ...
 - CSS的基础使用
			
一,css是什么? CSS全称为“层叠样式表” ,与HTML相辅相成,实现网页的排版布局与样式美化 二,CSS使用方式 1.行内样式/内联样式(单一页面中使用) 借助于style标签属性,为当前的标签 ...
 - 在web中使用shiro(会话管理,登出,shiro标签库的使用)
			
在shiro的主配置文件中配置,登出的请求经过的过滤器就可以了,在shiro的过滤器中有一个名称为logout的过滤 器专门为我们处理登出请求: 一.shiro会话管理器 shiro中也提供了类似于w ...
 - Anaconda 常用命令大全
			
帮助目录 检查conda版本 升级当前版本的conda 创建一个新环境 激活新环境 Linux,Mac: Windows: 列出所有的环境 切换环境(activate/deactivate) Linu ...
 - HC32F003C4PA GPIO Output
			
1.打开启动文件,找到并跳转至SystemInit函数 void SystemInit(void) { stc_clk_systickcfg_t stcCfg; // TODO load trim f ...
 - Spring源码阅读 之 配置的加载(希望有喜欢源码的朋友一起交流)
			
想写Spring的源码方面的东西想了好久了,之前花了一段时间学习了SpringCloud,现在总算对SpringCloud有了一个大概的了解,从今天开始好好读一篇Spring的源码,结合书本跟网上的一 ...
 - blesta运行造成阿里云服务器CPU频繁超载的原因分析
			
博主在阿里云服务器上安装了主机软件Blesta后,阿里云后台频繁提示CPU超载,打开突发性能模式后,发现CPU负载到了100%.如下图所示: 直接在putty里面reboot整个系统后,负载瞬间降为2 ...
 - Linux文件操作命令并举例说明其作用
			
ls ,常用于查看当前文件下有工作中需要的文件 cd, 常用于进行切换文件的位置 vim,常用于编辑软件系统相关的配置文件 ps –ef|grep jdk,常用语显示跟jdk有关的进程 |:表示 ...
 - html中require.config 缓存问题
			
在html中,require的官方基本用法如下: <!DOCTYPE html> <html> <head> <title>My Sample Proj ...