本人并非专业的程序员,但对编程有着浓厚的兴趣,而这种兴趣始于大一时学习C++课程之后。几年来我经常利用业余时间写点儿小程序,或者看一些理论书籍,对编程和软件开发也有了一定的认识。
去年9月份,我还用着一台很旧的长城笔记本电脑,经常死机的烂机器而且官方提供的驱动程序仅支持32位系统,后来由于学习AE换用了64位win7系统,这导致调节音量或者屏幕亮度时不能在屏幕上显示提示信息了。虽然这只是无关紧要的问题,但想到自己会一点儿编程,心想何不为自己定制一款用于提示音量信息的小工具软件呢?
很快我就开始着手准备了,而且最初的想法也因为灵感不断涌现而变得充实起来,并逐步实现。到后来,软件不仅能提示音量信息,而且能够自定义音量调节快捷键,随后又加入了电量监控,定时任务,音量环境模式以及Capslock、Numlock状态提示功能(因为当时的机器大写锁定提示灯在前缘,很不方便,搞不懂为什么会有这么蛋疼的设计,现在用的联想Z580也是这样)。眼看的这个程序起来越有一个软件的样了,也开始有使用者反馈意见和建议,这使我很欣慰,虽然这种软件是很小众的,但毕竟有人会用。在此之前有国外牛人做的Volume2已经很成熟了(事实上我的软件最初也借鉴了这款软件,还有另一款不太出名的“都客”音量调节软件),所以我决定进一步改进它,当然并不期望能超越Volume2,只不过竭尽所能使软件更完善。
下面的两幅图是比较早版本的关于页面和设置界面
在之后的一个版本中我尝试着改进自定义提示窗口的方法,但看起来并不太好。
而下面的图是最新的版本设置窗口其中的一个子页面以及软件的“关于”页面。
当然中间还有几个版本,可以看到,整体的变化还是很大的。虽然软件还不完善,但纵观始末,一切都在向好的方向演变。
现在我将公开这个软件整个项目文件,它最后一次编译是在我着手写这篇博文的几小时之前,算是最新的版本了吧。其中肯定也还有不少问题,希望能有高人会有兴趣并对它进行改进,同时也算是分享一下自己的经历以及从中学到的经验吧。
音量快捷助手1.2.2.1免安装版下载地址
http://pan.baidu.com/share/link?shareid=545598&uk=2232311271
项目文件下载地址
http://pan.baidu.com/share/link?shareid=545596&uk=2232311271
软件使用C#语言编写的,开发平台是Visual Studio2012,.netframework版本4.5,不过在发布时将改成了4.0以免部分人因版本过低而无法使用。
在本文开头提到过,我最初学习的是C++,也曾经试着做过MFC程序,但感觉那个太麻烦,本人开始制作这个软件的时候刚接触C#一个多月,但发现它异常好用,一番摸索过后很快就找到感觉了。文件中的注释可能不全面,而且因为并非专业人士,整体也不太规范。
最后分享几点儿小经验:
1、对于完成这种全局快捷键功能,一般可以采取钩子或者注册全局热键。后一方法在代码方面要简洁得多,但考虑到本软件要定义很多快捷键,并且还要响应多媒体按键以及鼠标键,我选择了全局钩子。期间学到的经验就是如果能找到别人现成的代码,就别自己从头来过,这样会省下不少时间的精力。项目中使用的键盘和鼠标钩子就是一外国人写的,当然借用别人的也不能照搬,需要针对自己的目的进行修改,更正其中的错误并使代码更高效。
2、Vista或更高的系统中调节音量可以使用CoreAudioApi。CoreAudioApi也就是核心音频API,它提供的函数可以很方面地获取音量信息和调节音量。这个动态库文件可以上网上下载,其中的一函数用法之类的都可以在网上找到比较详细的示例。比如我在codeproject找到了一个不错的范例。
具体用法请移步http://www.codeproject.com/Articles/18520/Vista-Core-Audio-API-Master-Volume-Control
3、关于WinFrom项目里面的settings文件的用法。
Settings文件是一种比较简单的保存用户设置的文件,它可以保存很多类型的变量,除了常规的int,string,bool等,也可以先Point,keys等类型,而我在这个项目里就是就keys来保存设置的快捷键的,而Point用来保存提示窗口的位置。如下图所示
另外,网上关于Settings文件的用法大多在说如何用Save()函数将设置保存到本地,而对于其它的一些函数很少说明。我自己摸索出一条很有用的技巧,就是使用它的Reset()函数使设置恢复默认状态。这个函数在前几天才发现,而在此之前我还很笨的在项目中保存两个Settings文件,一个用于存储用户设置一个用于默认设置,而恢复默认的时候将默认Settings文件的值一个个赋给控件……现在想想,实在是太蠢了。
4、前面几条中提到的我在网上找到不少例子,这一点也是很重要的经验。
5、乐于折腾并且善于折腾,不断尝试新的想法,有灵感的时候随时记录下来。当然在折腾之前得记得备份,这是善于折腾的要点,也是我从惨痛的教训中学到的。
这是我的第一篇博客,如果对我的软件有兴趣可以和我讨论。也欢迎高手赐教!