我们前面已经理解了如何使用官方的代码实现鼠标键盘的监控,其实还差一点,因为他的代码只能捕捉单个的按键,而其实我们要的是组合键。什么是组合键呢?比如我想定义同时按下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

邮箱:acetaohai123@163.com

 

 

 

C#基础视频教程5.2 如何编写简单的超级热键的更多相关文章

  1. C#基础视频教程5.1 如何编写简单的超级热键

    我们上一节介绍了编写简单计算器,实际上也是出于实用角度(这个计算器只要你肯改,肯定能做的比微软自带的计算器好用).这一节介绍做简单的超级热键(所谓的超级热键是指自定义快捷键的功能) 超级热键的最关键一 ...

  2. C#基础视频教程5.3 如何编写简单的超级热键

    跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去   然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应 ...

  3. C#基础视频教程7.5 如何编写简单游戏

    有一些BUG需要处理,比如小鸟太高或者太低都应该报错(不然直接掉到窗口下面去了),这个方法跟前面的HitTest应该独立开来,而不是掺和在一起   测试确实可以检测是否超过边界(如果要非常精确,那么就 ...

  4. C#基础视频教程7.3 如何编写简单游戏

    前面我们大致实现了鸟的一圈轨迹(其实如果你不做这个,就用两个矩形块的碰撞检测代替也可以),跟所有前面的教程一样,草稿打完了就要设计封装成一个类.至少到目前为止我们已经知道了鸟的属性和方法,先不要管方法 ...

  5. C#基础视频教程7.2 如何编写简单游戏

    前面一小节我们实现了简单的碰撞检测,但是实际上游戏的对象并不是一个标准的矩形(小鸟是一个不规则的物体,其实碰撞的管道也是不规则物体),所以如果真的要做的比较完美,我们自己要写一个方法,能够导入一个图像 ...

  6. C#基础视频教程4.3 如何编写简单的计算器

    我们接着往下改,为了让这个计算器更加实用,我们要像官方的计算器一样可以接着计算(你算出来一笔数据之后,可以接着累加累减,我们暂时不考虑加括号,优先级之类的,因为绝大部分情况下我们打开计算器就是为了进行 ...

  7. C#基础视频教程4.2 如何编写简单的计算器

    用过VB6或者早期代码的人都应该能感觉到,C#目前也没看出来有什么特别之处,所谓的面向对象也没有什么体现.所以我们需要在原有基础上重写一份代码,然后比较两种做法的优缺点.我们在项目上右击添加一个Fun ...

  8. C#基础视频教程7.4 如何编写简单游戏

    接下来我们实现整个的游戏流程,当点击开始游戏,则需要三个事情开始运行 1 小鸟初始化并往下掉(当然还是可以用按钮让他飞一下) 2 每隔一定时间从左侧产生一个管子(宽度和高度随机,产生周期2000ms左 ...

  9. C#基础视频教程7.1 如何编写简单游戏

    要做一个FlappyBird,最核心的功能是创建几个区块,如果发生碰撞则游戏结束(小鸟撞到管子上,或者小鸟到地上),至于随机生成一些管子,小鸟如何跳跃,最后如何统计分数,都不难想通要怎么做.   首先 ...

随机推荐

  1. shell中的条件判断if和测试

    (一)条件判断 if 中-z 到 -d 的意思 [ -a file ] 若file存在,则为真. [ -b file ] 若file存在且是一个块特殊文件,则为真. [ -c file ] 若file ...

  2. PHP之 xampp 安装环境

    1.安装XAMPP  需要注意以下几点: (1):必须已管理员身份运行: (2):先点击安装Apache和mysql(如果apche端口被占用,先停止服务里面的apche服务) (3):别忘记切换PH ...

  3. HDU 6166 Spfa

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6166 题意:给出一个n个点的有向图.然后给你k个点,求这k个点任意两点之间的最短路的最小值.思路: 以 ...

  4. 鬼谷子的钱袋 2006HNOI

    题目描述 Description 鬼谷子非常聪明,正因为这样,他非常繁忙,经常有各诸侯车的特派员前来向他咨询时政.有一天,他在咸阳游历的时候,朋友告诉他在咸阳最大的拍卖行(聚宝商行)将要举行一场拍卖会 ...

  5. [BZOJ 3720][JZYZOJ 2016]gty的妹子树 强制在线 树分块/树套树

    jzyzoj的p2016 先码着,强制在线的树分块或者树套树?关键是我树分块还在入门阶段树套树完全不会啊摔   http://blog.csdn.net/jiangyuze831/article/de ...

  6. [CodeForces-763C]Timofey and remoduling

    题目大意: 告诉你一个长度为n的等差数列在模m意义下的乱序值(互不相等),问是否真的存在满足条件的等差数列,并尝试构造任意一个这样的数列. 思路: 首先我们可以有一个结论: 两个等差数列相等,当且仅当 ...

  7. lightoj 1296 - Again Stone Game 博弈论

    思路:由于数据很大,先通过打表找规律可以知道, 当n为偶数的时候其SG值为n/2; 当n为奇数的时候一直除2,直到为偶数m,则SG值为m/2; 代码如下: #include<stdio.h> ...

  8. bzoj 3594

    题解见: http://blog.csdn.net/qpswwww/article/details/44407371 收获: 1.对于一个问题,看似不可做,但一定存在一定特点,我们要做的就是找出一些特 ...

  9. bzoj 1012 BST 支持插入,区间最大

    水... /************************************************************** Problem: 1012 User: idy002 Lang ...

  10. mvc 从客户端 中检测到有潜在危险的 Request.Form 值

    天往MVC中加入了一个富文本编辑框,在提交信息的时候报了如下的错误:从客户端(Content="<EM ><STRONG ><U >这是测试这...&qu ...