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,最核心的功能是创建几个区块,如果发生碰撞则游戏结束(小鸟撞到管子上,或者小鸟到地上),至于随机生成一些管子,小鸟如何跳跃,最后如何统计分数,都不难想通要怎么做. 首先 ...
随机推荐
- Ubuntu下环境变量该写进哪个文件里
Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登录到系统的用户都要读取的系统变量,而用户级的环境变量则是该用户使用系统时加载的环境变量. 所以管理环境变量的文件也分为系统级和用户级的. ...
- dp 神奇的口袋
有一个神奇的口袋,总的容积是40,用这个口袋可以变出一 些物品,这些物品的总体积必须是40. John现在有n(1≤n ≤ 20)个想要得到的物品,每个物品 的体积分别是a1,a2--an.Joh ...
- android studio 安卓工作室 汉化完整版
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 汉化包 百度云盘 下载地址:https://pan.baidu.com/s/1pLjwy ...
- FFT(快速傅里叶变换)
学习了FFT用来求多项式的乘法,看了算导上的介绍,上面讲的非常明白,概括一下FFT的原理就是,我们在计算多项式的乘法时,如果暴力模拟的话是n^2 复杂度的,就像小学学的竖式乘法一样,比如一个n位数乘上 ...
- [BZOJ4416][SHOI2013]阶乘字符串(子集DP)
怎么也没想到是子集DP,想到了应该就没什么难度了. 首先n>21时必定为NO. g[i][j]表示位置i后的第一个字母j在哪个位置,n*21求出. f[S]表示S的所有全排列子序列出现的最后末尾 ...
- 51nod部分容斥题解
51nod1434 区间LCM 跟容斥没有关系.首先可以确定的一个结论是:对于任意正整数,有1*2*...*n | (k+1)*(k+2)*...*(k+n).因为这就是$C_{n+k}^{k}$. ...
- JZYZOJ1237 教授的测试 dfs
http://172.20.6.3/Problem_Show.asp?id=1237 锻炼搜索的代码能力,不错的题. 开始对dfs到底向下传递什么搞不清楚,需要想一下,noip难度的题还有这种情况 ...
- HDU 6136 Death Podracing(循环链表)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6136 [题目大意] 一堆人在操场上跑步,他们都有一定的速度和初始位置, 当两个人相遇的时候编号较小 ...
- WEB架构师成长之路 一
一 .你必须学习面向对象的基础知识 1.降低软件开发的复杂度 2.提高软件开发的效率 3.提高软件质量:可维护性,可扩展性,可重用性等. 提高软件质量:可维护性,可扩展性,可重用性等,再具体点,就是高 ...
- 【8.26校内测试】【重构树求直径】【BFS模拟】【线段树维护DP】
题目性质比较显然,相同颜色联通块可以合并成一个点,重新建树后,发现相邻两个点的颜色一定是不一样的. 然后发现,对于一条链来说,每次把一个点反色,实际上使点数少了2个.如下图 而如果一条链上面有分支,也 ...