你是如何克服编程学习中的挫折感的?
编程学习之路上,挫折感就像一道道难以逾越的高墙,让许多人望而却步。然而,真正的编程高手都曾在这条路上跌倒过、迷茫过,却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的?面对复杂的算法时,你用什么方法让自己保持冷静?让我们一起分享那些克服挫折的经验,为彼此的编程之路点亮希望之光!
0 学习用MASM32编程Windows程序
记得从学校毕业刚参加工作那会,正赶上个人电脑的操作系统从以字符界面为主(CGI)的DOS向以图形用户界面为主(GUI)的Windows迁移的浪潮风口。
我们在学校学习的编程语言,如GW BASIC、Turbo PASCAL、Turbo C都只能用来编写DOS的应用程序,虽然也可以写出具有Windows风格(用绘图函数画出窗口、标题栏、按钮等)、支持鼠标操作的程序,但终究还是运行在DOS下的。
要编写Windows的应用程序,比较常用的开发工具是Visual Basic(基于可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言IDE)、Borland Delphi(基于Object Pascal的IDE)、Visual C++、Borland C++ Builder等,这些语言对我来说学起来并不算难,难的是对电脑系统配置比较高。
相对而言,我更喜欢使用MASM32。
MASM32是Iczelion 等MASM爱好友制作的开发工具,既可以用来开发Windows桌面应用程序(GUI界面),也可以用来开发Windows控制台程序(CUI界面),还可以用来开发驱动程序。
当时关于MASM32的使用教程主要是 iczelion的win32汇编教程 和 罗云彬的win32汇编教程。
有DOS下的MASM编程基础,通过以上两个教程来学习MASM32还是比较容易的,因为这两个教程都是循序渐进,带有实例,并做了详细讲解的。
但在实际编程过程中,遇到难题时,能够找到的参考资料不多,可能上有关的论坛发起讨论,争取获得过来人的指点,如果没有获得有效的资料,还是需要自己攻坚定难。
1 编写瑞星杀毒助手时遇到的2个问题及其解决过程
比如,在用MASM32编程“瑞星杀毒助手”时,先后遇到了两个问题。
1.1 跨进程的数据获取
瑞星杀毒助手需要从瑞星网站的免费在线查毒网页上复制查毒结果,然后做进一步的处理、
这里涉及到跨进程的数据获取,而且对Window 9x (95 、98、me)和 基于NT内核的 Windows 2000及其后续版本,获取方法还不完全一样。
由于 iczelion的win32汇编教程 和 罗云彬的win32汇编教程都没有讲到跨进程的数据获取的内容,当时我也没一点都没谱,无从下手,于是先在MASM32官网论坛上发贴求助,得到了来自Canada的网友Donkey的大力帮助,首先解决了基于NT内核的 Windows 2000及其后续版本中的跨进程的数据获取方法,然后在此基础上,结合Windows 9.x的特性,完成了在Windows 9.x上的跨进程的数据获取方法。
1.2 调用文件的系统关联菜单
有时我们在杀毒前需要对染毒文件进行采样或备份,最直接的办法就是调用染毒文件的系统关联菜单来直接完成对染毒文件的打包功能。
调用文件的系统关联菜单,涉及到COM技术,这在 iczelion的win32汇编教程 和 罗云彬的win32汇编教程都没有讲到。我也是在MASM32官网论坛上发贴求助,再次获取热心网友的帮助,迅速地解决了问题。
关于瑞星杀毒助手的更多信息,请查阅:
免费软件“瑞星杀毒助手”说明和下载(0.1.0030)-CSDN博客https://blog.csdn.net/Purpleendurer/article/details/2195251
2 编写文本朗读程序speaker实现文本列选功能
通常我们的选择文本是以行为单位的,但有时需要按列来选择。
比如在Word中,按住ALT键,同时按住鼠标左键并拖动,就可以实现列选。
EDITPLUS也有这个功能。
在使用MASM32编写文本朗读程序speaker时,集成了richedit控件,也想实现文本的列选功能。
但是richedit控件没有直接提供实现列选功能的方法或消息,只有DIY了。
记得当时MASM32官方论坛无法访问,我上罗云彬的论坛上发贴讨论这个问题,罗云彬当时也跟贴回复了,不过他提供的是常规的行选的方法。
后面,我还是自己想办法实现了列选功能。
关于文本朗读程序speaker的更多信息,请查阅:
Speaker——用MASM32编写的文本朗读程序(7KB)_speakersdk-20230207.txt-CSDN博客https://blog.csdn.net/Purpleendurer/article/details/5761079