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

    Demand 1 用实现循环队列 2 参考PPT用循环队列打印杨辉三角 3 用JDB或IDEA单步跟踪排队情况,画出队列变化图,包含自己的学号信息 4 把代码推送到代码托管平台 5 把完成过程写一篇博 ...

  2. 事务有哪些特性?spring的事务管理有几种方式实现,如何实现?

    特性:1.原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做要么全不做 2.一致性:数据不会因为事务的执行而遭到破坏 3.隔离性:一个事物的执行,不受其他事务的干扰,即并发执行的事 ...

  3. Intelij Idea下的git使用

    一.简介 在我们入门软件研发并且是团队开发的时候,总会遇到这样合代码这么简单粗暴的工作,最开始我也能体会到这项工作折磨.那git是干什么得呢?简称分布式版本控制系统,常见就是上传代码.整合代码.更新代 ...

  4. jsonp和jsonpcallback的使用

    1. jsonp.jsonpCallback  jsonp跨域时可以自定义的两个参数 2. jsonp: 回掉函数名的参数名,默认callback,服务端通过它来获取到回掉函数名 3. jsonpCa ...

  5. JavaScript中typeof详解

    [范围]typeof返回值范围: typeof返回值对应 类型 结果 String "string" Number "number" Boolean " ...

  6. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...

  7. 禁止body滚动允许div滚动防微信露底

    最近遇到一个需求,页面中只有一个div允许滚动,其他内容不允许滚动. 正常来讲加上 body{height:100%;overflow: hidden;} 应该就阻止页面滚动了.可是很悲催的是手机端并 ...

  8. Java ClassLoader加载机制理解 实际例子

    针对 Java ClassLoader加载机制理解, 做了个如何自定制简单的ClassLoader,并成功加载指定的类. 不废话,直接上代码. package com.chq.study.cl; im ...

  9. java项目怎样添加jar包依赖?

    工程->右键properties->add external jars

  10. ORACLE的VARCHAR2是字节还是字符

    往Oracle一个表的VACHAR2(20)字段中插入七个汉字,提示错误:插入的值太大. 改成插入六个汉字,又可以. 于是百度,原来这与ORACLE的字符集设置有关.(以前的项目都是设置成的ZHS16 ...