跟前面一章讲解计算器一样,到最后一小节,我们总是要把代码规整好,让整个程序显得非常简洁,先做个文件夹把我们自定义的类库都放进去

 

然后我们开始整理Form1里面的代码,为了实现超级热键的功能,我们应该完善FunctionMouseKeyboardHook这个类(因为现在叫做超级热键,可能后面我们需要用鼠标键盘来触发干一些别的事情,到时候如果也能拿着代码直接移植就会很有意义,不改变业务的框架,WIN+A/Z的字母应该已经够用了,而且考虑不跟系统自带的快捷键冲突,例如WIN+L是系统自带的锁定计算器),那么除了我们移植了人家的范例代码的对象,我们还需要增加额外的对象(这些都是从Form1中挪过来的)

 

方法也是一样,从Form1中直接挪过来,其实就是两个方面,一个是鼠标键盘的触发,一个是配置文件的读写

 

这样做的好处是显而易见的,Form1中非常干净,只是引用了类库,然后初始化用了一行,然后点击按钮之后就是把文本框的数据采集出来执行读写,而且所有功能都是在类里面交互。这样很方便移植和扩展,而且也是为什么要分成这么多步骤慢慢实现的原因(都放到Form1中也能做,但是并不利于扩展,我们要把程序做的越简洁越好)

 

对于鼠标键盘的监控,我们只是在委托中刷新FunctionHook的静态属性,然后Form1做了一个定时器每隔100ms刷新去获取。这样做是为了调试方便,因为在label中显示当前的鼠标键盘操作已经可以不用,我们完全可以实现我们要的功能,然而保留这些却可以清楚的知道我们的事件是如何被触发的,有没有被触发。

 

对于读写文件部分,我们还做了额外的判断,这也是一个简单的编程技巧(先做一个bool值为true,几组快捷键只要有一个不正确,就一个都不会执行),并且整个函数不是void而是bool,也就是说Form在调用我们类的时候是能够知道完成没有的,如果没有完成,也不要刷新界面的控件了(比如你写入一个非法值,明明是错的,却文本框还是被写进去了,用这样的做法可以提高代码的质量)

 

在这个封装好的类的基础上,我们再简单完善一下,比如要把前面读写的参数做成可以导入导出的形式,最简单的方法是使用C#自带的控件。

参数导入,本质是打开文件的对话框(找到一个文件并打开,获取这个文件的完整路径和文件名OpenFileDialog)在我自定义的类中,已经可以傻瓜到设置一个初始目录,设置文件类型即可(一般初始目录设置在程序的根目录下,文件类型设置成常规即可,读者可以自己看看有没有其他方式,比如C#自带的控件的方式如何实现)

 

参数导出,本质是保存文件的对话框(设置一个文件名并保存,获取这个文件的完整路径和文件名SaveFileDialog)在我自定义的类中,已经可以傻瓜到设置一个初始目录,设置文件类型即可(一般初始目录设置在程序的根目录下,文件类型设置成常规即可,读者可以自己看看有没有其他方式,比如C#自带的控件的方式如何实现)

 

最后看看如何打开截图文件夹,由于搜索自带的截屏会在他的EXE的同一个目录下生成一个pool的文件夹(这个是他写死的,不能改)我们只要找到这个EXE目录下的pool目录打开即可(打开文件夹也是很常用的功能,放到FunctionSystem类下会经常用得到)

 

最后为了对比TXT和INI的读写,我也把INI的读写简单实现了一下(INI比TXT来说就是更加规范一点,section是节点,Key是名称,Value是数值,你可以有多个节点,每个节点下有多个Key,每个Key对应一个Value即可),感兴趣的读者可以自己完善(如果要详细列举读写文件,也是很多的,XML,XLS,数据库都是,而且各有优缺点,初学者掌握一两种常用的即可)

 

总结:本节课程还是比较长,因为我们又扩充了很多自定义的类(FunctionSystem,FunctionString),每一个类都会以后在实际的项目中提高编程效率,减少垃圾代码,读者还是需要仔细体会代码是怎么样一步一步修改到足够精简的(其实这个超级热键还是可以接着扩展,做的更加实用,比如开机自动启动,最小化托盘图标,或者跟我们前一节写的计算器结合起来,一个快捷键打开计算器,读者可以自由发挥)。

1 理解如何使用别人的类,快速看懂别人整个的从控件到实现的流程,能移植别人的代码自己用

2 学会自己构建一些,扩展一些功能(比如这次别人的代码中只是能捕捉鼠标键盘,那么捕捉组合按键就是要自己想办法实现的)

3 学会自己扩展自己的类库,尤其是跟系统打交道比如文件处理,甚至系统时间,系统硬件,系统内存消耗这些我们都可能会用到,跟字符串打交道(变量的导入导出之类的)

 

 

更多教学视频和资料下载,欢迎关注以下信息:

我的优酷空间:

http://i.youku.com/acetaohai123

 

我的在线论坛:

http://csrobot.gz01.bdysite.com/

 

问题交流:

QQ:910358960

邮箱:acetaohai123@163.com

 

 

 

 

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

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

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

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

    我们前面已经理解了如何使用官方的代码实现鼠标键盘的监控,其实还差一点,因为他的代码只能捕捉单个的按键,而其实我们要的是组合键.什么是组合键呢?比如我想定义同时按下WIN+C是去执行屏幕截图.这只要理解 ...

  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. xpath相关巩固

    python爬虫xpath的语法 XPath 是一门在 XML 文档中查找信息的语言.XPath 可用来在 XML 文档中对元素和属性进行遍历. XPath 是 W3C XSLT 标准的主要元素,并且 ...

  2. 苹果无sim卡激活

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 苹果无sim卡激活  这是不行的... 必须有SIM 卡. 有可能卡贴坏了,更换卡贴.

  3. [BZOJ4870][六省联考2017]组合数问题(组合数动规)

    4870: [Shoi2017]组合数问题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 748  Solved: 398[Submit][Statu ...

  4. noip200807传纸条

    试题描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...

  5. PHP -- 配置Apache遇到的问题

    在本地电脑用XAMPP+php+mysql配置项目的时候,能够正常运行. 但是通过远程进入VPN配置的时候,配置方式一样,但是老是无法显示. 后来看了错误日志后,发现之前在没完全配置完的时候运行,生成 ...

  6. Educational Codeforces Round 10 A. Gabriel and Caterpillar 模拟

    A. Gabriel and Caterpillar 题目连接: http://www.codeforces.com/contest/652/problem/A Description The 9-t ...

  7. Linux下使用ISC DHCP可以实现动态推送静态路由表

    ISC DHCP可以实现动态推送静态路由表,先做个记号. 参考: https://gauvain.pocentek.net/docs/dhcpd-push-routes/ http://www.isc ...

  8. UML建模之时序图(Sequence Diagram)教程

    一.时序图 时序图是一种强调时间顺序的交互图,在时序图中,首先把参与交互的对象放在图的上方,沿X轴方向排列.通常把发起交互的对象放在左边,较下级对象依次放在 右边,然后把这些对象发送和接受的消息沿Y轴 ...

  9. 1036: [ZJOI2008]树的统计Count (树链剖分)

    1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3401  Solved: 1418[Submit] ...

  10. 模板方法在Spring事务中的应用

    事务对于我们来讲不并陌生,也是在实际应用中一直都在使用.在JDBC中,事务大致的使用结构如下: 开启事务 业务逻辑处理 提交事务 Spring只是对事务进行了扩展和封装使用,现在看看在内部它是如何工作 ...