上周末在家整理家里的硬盘,看到了好多以前的照片,感叹时间过得可真快,曾经还是个懵懂少年,如今却快成油腻大叔了(苦涩)。翻看大学的项目文件时,看到了这个AutoDiskCopier,突然间仿佛就回到了高二时抱着《Windows程序设计》在宿舍里啃书的场景,当时书还没完全看完,又正值差不多要会考的时候,政史老师为了大家上课认真听他讲课,从来都不把课件留给我们,于是一个大胆的想法就出现了,第一版应用就是在这样的情形下写出来的,然而当时并没有看到这本书的后面章节,所有的应用上的控件全是一个一个窗口创建并自己维护的…之后看到了书的后面几章,才发现自己实在是太愚蠢了,居然写了个硬核代码出来。虽然第一版就这样了,但是这件事也影响了我后来的思考方式,做一个项目不会马上直接上手写代码,应该先做调研,看看有没有什么更快捷更妙的方法,再关注一下类似的东西都是怎么做的,最后设计和分析,才上手编码。后来大学时有一门程序设计课,结课需要交一个大作业,正好想起了这个项目,借机重构出了第二版,当成大作业交了上去,后来还成了满分项目::(A_A)::。第三版是这一周有空的晚上花上大约半个小时做的,其实代码沿用了第二版的代码,只做了UI的改版和一些问题的修复。
代码开源在了Github上:https://github.com/KondeU/AutoDiskCopier
U盘小偷的“偷文件”的技术核心其实很简单,处理Win32的WM_DEVICECHANGE
消息就可以了,当有外部设备插入时,Windows会向当前所有进程广播WM_DEVICECHANGE消息。我们在收到该消息后,确认插入的是一个磁盘设备,就可以进行拷贝操作。
为了避免拷贝阻塞消息处理的循环,我们不能直接在主消息循环线程中拷贝,因此我们开个后台线程处理拷贝任务。
其他的外围:通用对话框
、系统托盘图标
、MD5校验
被我封装到了CmnDlg.h
、NotifyIcon.h
、MD5.h
三个文件中,这些通用的模块可以复用。