用汇编写了个半成品(部分技术超越暂时..待V1.2以后版本那啥)
功能有:
(1)获取内存状态
(2)端口占用状态
(3)进程列表+进程管理
(4)清理系统垃圾(非外部调用,外部调用参见https://shadowkong.com/archives/133)
首先上图~
比较悲剧的是端口监听功能上实现得太没进步了~还是外部调用…..
.
.
.
.
.
.
.
.
.
详解:
<1>获取内存状态
代码:
_GetMemInfo proc uses ecx
local @stMemInfo:MEMORYSTATUS
local @szBuffer[1024]:byte
local @szBuffer1[50]:byte
.while F_STOP
mov @stMemInfo.dwLength,sizeof @stMemInfo
invoke GlobalMemoryStatus,addr @stMemInfo
invoke wsprintf,addr @szBuffer,addr szInfo,\
@stMemInfo.dwTotalPhys,@stMemInfo.dwAvailPhys,\
@stMemInfo.dwTotalPageFile,@stMemInfo.dwAvailPageFile,\
@stMemInfo.dwMemoryLoad,\
@stMemInfo.dwTotalVirtual,@stMemInfo.dwAvailVirtual
invoke SetDlgItemText,hWinMain,IDM_INFO,addr @szBuffer
invoke wsprintf,addr @szBuffer1,addr szInfo1,@stMemInfo.dwMemoryLoad
invoke SendMessage,hWinStatus,SB_SETTEXT,3,addr @szBuffer1
invoke Sleep,1000
.endw
ret
_GetMemInfo endp
;————————————————————————–
参考罗老师的子程序,创建线程把这个作为回调给它~这样获取内存就能自己一个人在那里工作了~
经过修改的回调函数具有更人性化的功能~
首先看红色代码句,判定停止工作的条件是一个全局变量
也就是通常人们所说的全局标志~
只要F_STOP不是ZERO 线程就一直运行下去~
再看绯红色代码句,在循环中让线程睡觉(挂起)1秒~
这主要考虑到在对文本框发送内存状态转换后的内容替换的闪烁问题…
经过挂起1秒 发现效果不明显..就像叫你工作然后只给你每次休息一秒你还是觉得累一样~
举个更贴切的例子就像我叫清风去捕鱼,然后没给他打电话不准停止捕鱼一样~但是他每打一次鱼都能休息1秒~
可是悲剧的是每次休息完他都喊累…哎
<2>清理垃圾
前面说到了外部调用.BAT文件..通过管道把文件运行返回的信息返回到程序缓存区..
今天在这里改进下,不需要外部调用直接…内部…原理是找到特征文件..然后invoke DeleteFile…
这里要知道几种特殊文件夹的路径等…例如怎么获取本机的临时文件夹拉 等等~
<3>进程列表+进程管理
遍历原理:
主要是调用CreateToolhelp32Snapshot
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
再通过
Process32First Process32Nex 遍历进程 +进程IP~
然后再写到列表框上…
结束进程原理:
通过OpenProcess获得选定进程的ID
然后调用TerminateProcess强制结束…这种方法虽然可以实现结束 但是..不是最好的方法..万一进程没保存啥重要东西那不是悲剧??
除此之外还在程序上加了各种控件和绘图等小技巧…算是对之前学习的一个总结归纳吧~
附上PE文件下载连接….
PS:内存状态子功能改写到书本例子~只不过加入了线程调用运行~