C#基础视频教程5.2 如何编写简单的超级热键
我们前面已经理解了如何使用官方的代码实现鼠标键盘的监控,其实还差一点,因为他的代码只能捕捉单个的按键,而其实我们要的是组合键。什么是组合键呢?比如我想定义同时按下WIN+C是去执行屏幕截图。这只要理解为WIN键按下且没有弹起,C键也被按下,然后去执行一个EXE程序即可。
我们需要写一个类把之前的封装起来

这样就比较简洁,初始化和添加绑定都只用了一行(+=就是添加绑定,读者也可以测试多次+=的效果,-=就是取消绑定,这样做可以让主程序显得比较干净)

我们来思考一下如何实现捕捉一组按键,比如WIN键是第一个触发热键,C是第二个触发热键,触发之后执行CaptureScreen(屏幕截屏),如果D是第二个触发热键,就执行DrawScreen(屏幕绘图),所以很明显第一步是写一个触发的方法,如果HotKeyMain成立,再看第二个按键是否成立,如果都成立则执行指定的功能

初始化的时候,我们已经指定了HotKeyMain是LWin,HotKeySub是A-Z的26个字母(我们暂时不考虑更为复杂的情况,比如F1-F12的按钮,比如Tab,特殊符号作为热键的触发按钮)

检测到WIN键松开之后,第一个布尔值已经是false,就不会再触发任何功能了(当然这是我初步设想的逻辑方式,读者可以思考有没有更合理的方式,我们在下面一个部分会把这些放到Form1的内容移植到新的自定义类里面,把程序的表现层和业务层分开,方便我们扩展自己的类库)

具体到执行层面,我们只需要调用windows自带的process类即可(把三个EXE文件放在debug目录下),至于这三个EXE怎么来的就先不要管了(网上有很多,比如CaptureScreen这个EXE截图工具是搜狗截图自带的,我们直接拿过来用即可),因为最后我生成的EXE程序也是Debug目录打包即可,所以这里为了方便直接放到同目录下即可,process.StartInfo.FileName不需要跟详细路径

为了让用户可以自定义快捷键,我们还可以把字母的组合做成文件读写的方式(可以载入文件,也可以写入文件),最常见的文件读写方式肯定是TXT文件(我也提供了INI文件的读写类,后面会讲读写EXCEL,读写数据之类的,先掌握最简单的)。首先我们测试写入文件的方法,这里我们又新增了两个类,一个是FunctionSystem(获取系统常用的目录),一个是FunctionFileTXT(执行TXT文件的读写),这些功能都可以百度轻松找到,我们只是为了说明整合成自己的类的好处,可以直接调用

这里暂时不详细讲解读写文件的注意事项,有很多模式,很多参数,但是其实我们只会需要考虑几种常用的(追加的方式或者重写的方式),这里我们只是写入了三行快捷键对应的信息

而获取系统文件夹的功能FunctionSystem我们也会在后面继续扩展(因为除了快速的定位到常用的目录比如Programs Files文件夹,Windows文件夹,程序的目录,这个类还应该有很多其他功能,我们后面会扩展)

写入文件实现之后,接下来就考虑读取(为什么是XXX|C,XXX|D呢?这个是我们自己定义的,因为格式是自己设置的,你中间的分割符号也可以用空格或者其他字符,或者你也可以不用我这种一行对应一条参数的方式),我接下来就是要自己读取并解析刚才写入的文件(要仔细体会文件的读取和写入过程,并不在于读写的具体代码,因为网上可以找到很多照抄就行了,而是为什么读写成这样,如何以最简单的格式保存变量)

有了读写之后,重置就很简单了,就是写入默认的参数而已(可以直接复制一份写入,把原来的变量该成常量即可)

读取文件的时候我们还引入了字符串的解析(只是把字符串按照某个字符提取到字符串数组或直接转成浮点数组),这个也是暂时不需要完全掌握,简单的有转义字符,复杂的有正则表达式,都是够学一个礼拜的,但是大部分情况下只要能找到,能拿别人的用就可以了,我们后续会接着完善这个FunctionString这个类(先是对整个配置文件按\n提取到行,再对每一行按|拆分成字符串,提取每一行的|之后的那个字符串),其实还有很多工作可以做,比如程序刚载入的时候读取参数,比如对用户输入的自定义参数做限制,防止非法输入等等,我们将在下面一部分介绍。

更多教学视频和资料下载,欢迎关注以下信息:
我的优酷空间:
http://i.youku.com/acetaohai123

我的在线论坛:
http://csrobot.gz01.bdysite.com/

问题交流:
QQ:910358960
C#基础视频教程5.2 如何编写简单的超级热键的更多相关文章
- C#基础视频教程5.1 如何编写简单的超级热键
我们上一节介绍了编写简单计算器,实际上也是出于实用角度(这个计算器只要你肯改,肯定能做的比微软自带的计算器好用).这一节介绍做简单的超级热键(所谓的超级热键是指自定义快捷键的功能) 超级热键的最关键一 ...
- C#基础视频教程5.3 如何编写简单的超级热键
跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去 然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应 ...
- C#基础视频教程7.5 如何编写简单游戏
有一些BUG需要处理,比如小鸟太高或者太低都应该报错(不然直接掉到窗口下面去了),这个方法跟前面的HitTest应该独立开来,而不是掺和在一起 测试确实可以检测是否超过边界(如果要非常精确,那么就 ...
- C#基础视频教程7.3 如何编写简单游戏
前面我们大致实现了鸟的一圈轨迹(其实如果你不做这个,就用两个矩形块的碰撞检测代替也可以),跟所有前面的教程一样,草稿打完了就要设计封装成一个类.至少到目前为止我们已经知道了鸟的属性和方法,先不要管方法 ...
- C#基础视频教程7.2 如何编写简单游戏
前面一小节我们实现了简单的碰撞检测,但是实际上游戏的对象并不是一个标准的矩形(小鸟是一个不规则的物体,其实碰撞的管道也是不规则物体),所以如果真的要做的比较完美,我们自己要写一个方法,能够导入一个图像 ...
- C#基础视频教程4.3 如何编写简单的计算器
我们接着往下改,为了让这个计算器更加实用,我们要像官方的计算器一样可以接着计算(你算出来一笔数据之后,可以接着累加累减,我们暂时不考虑加括号,优先级之类的,因为绝大部分情况下我们打开计算器就是为了进行 ...
- C#基础视频教程4.2 如何编写简单的计算器
用过VB6或者早期代码的人都应该能感觉到,C#目前也没看出来有什么特别之处,所谓的面向对象也没有什么体现.所以我们需要在原有基础上重写一份代码,然后比较两种做法的优缺点.我们在项目上右击添加一个Fun ...
- C#基础视频教程7.4 如何编写简单游戏
接下来我们实现整个的游戏流程,当点击开始游戏,则需要三个事情开始运行 1 小鸟初始化并往下掉(当然还是可以用按钮让他飞一下) 2 每隔一定时间从左侧产生一个管子(宽度和高度随机,产生周期2000ms左 ...
- C#基础视频教程7.1 如何编写简单游戏
要做一个FlappyBird,最核心的功能是创建几个区块,如果发生碰撞则游戏结束(小鸟撞到管子上,或者小鸟到地上),至于随机生成一些管子,小鸟如何跳跃,最后如何统计分数,都不难想通要怎么做. 首先 ...
随机推荐
- Centos7 安装单节点Torque PBS
Operation system: CentOS 7.3 Torque PBS: torque-6.1.1.1.tar hostname: rfmlab user name: cfd01 1. Ins ...
- 在树莓派3B上安装node.js
本文主讲如何在树莓派3B上安装node.js 环境描述1. 树莓派安装了`2016-11-25-raspbian-jessie-lite`(PS:在此版本的镜像中,默认禁用了ssh,在烧录好镜像之后, ...
- 【模式匹配】更快的Boyer
1. 引言 前一篇中介绍了字符串KMP算法,其利用失配时已匹配的字符信息,以确定下一次匹配时模式串的起始位置.本文所要介绍的Boyer-Moore算法是一种比KMP更快的字符串匹配算法,它到底是怎么快 ...
- Hibernate 单项多对一的关联映射
在日常开发中会出现很对多对一的情况,本文介绍hibernate中多对一的关联映射. 1.设计表结构 2.创建student对象 3.创建Grade对象 4.写hbm.xml文件 5.生成数据库表 生成 ...
- 理解面向消息中间件及JMS 以及 ActiveMQ例子
为了帮助你理解ActiveMQ的意义,了解企业消息传送背景和历史是很重要的.讨论完企业消息传送,你将可以通过一个小例子了解JMS及其使用.这章的目的是简要回顾企业消息传送及JMS规范.如果你已经熟悉这 ...
- 51nod1218 最长递增子序列 V2
看见标签推荐顺便就做了吧 记$f[i], g[i]$为$i$的含$i$的前缀最长递增子序列和后缀递增子序列 只要满足$f[i] + g[i] == LIS + 1$,那么$i$就是可能的 对于$i$而 ...
- const和define在值定义上的区别
(1) 编译器处理方式不同 define宏是在预处理阶段展开. const常量是编译运行阶段使用. (2) 类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开. const常量有 ...
- ZOJ 3256 Tour in the Castle 插头DP 矩阵乘法
题解 这题是一道非常好的插头题,与一般的按格转移的题目不同,由于m很大,要矩阵乘法,这题需要你做一个按列转移的插头DP. 按列转移多少与按格转移不同,但大体上还是基于连通性进行转移.每一列只有右插头是 ...
- C++ -- STL泛型编程(一)之vector
STL提供三种组件:容器,迭代器,算法,它们都支持泛型程序设计标准容器有两类:顺序容器和关联容器. 顺序容器(vector,list,deque,string等)是一系列元素的有序组合. 关联容器(s ...
- 微信小程序背景音频播放分享功能
如果正常背景音频播放的话,只能跳转到自己对应的微信小程序,无法分享朋友圈,我们需要设置分享朋友圈,需要调用一个API 音频背景播放 注意:背景播放在锁屏后播放只支持IOS端,安卓端虽然可以播放,但是锁 ...