用汇编写了个半成品(部分技术超越暂时..待V1.2以后版本那啥)

功能有:

(1)获取内存状态

(2)端口占用状态

(3)进程列表+进程管理

(4)清理系统垃圾(非外部调用,外部调用参见http://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:内存状态子功能改写到书本例子~只不过加入了线程调用运行~

前面说到汇编仅仅用一个API就实现窗口重绘..

http://shadowkong.com/archives/104

今天再次用汇编尝试屏幕重绘 虽然效果一样 但是用到的API大有不同~

整个屏幕重绘的关键代码:

invoke GetDC,hWin2
mov @hDc2,eax;
invoke CreateDC,addr szDriver,NULL,NULL,NULL
mov @hDc1,eax;
invoke GetClientRect,hWin2,addr @stRect
invoke BitBlt,@hDc2,0,0,@stRect.right,@stRect.bottom,\
@hDc1,0,0,SRCCOPY
invoke ReleaseDC,hWin2,@hDc2
invoke DeleteDC,@hDc1

窗口重绘和屏幕重绘分别用到不同的API配对~

说实话屏幕重绘其实就是那么简单~

但是我额外给它加了个功能:

屏幕响应窗口按键~

也就是相当于QQ远程协助中的远程控制…

当然这里只实现了简单的 鼠标键键和鼠标指针移动…

上图上图..

原理在于:

用特别的API获取屏幕句柄~

.elseif eax== WM_CREATE

invoke GetDesktopWindow

mov WindowHwnd,eax

然后通过处理窗口按键时候的坐标在屏幕相应坐标响应事件~

mov eax,@stPoint.y

shl eax,16

add eax,@stPoint.x

invoke PostMessage,WindowHwnd,WM_LBUTTONDOWN,MK_LBUTTON,eax

invoke PostMessage,WindowHwnd,WM_LBUTTONUP,0,eax

呃 就是这样…

基本原理就是这样…

更深入的问题是:

如何是它能实现响应IO消息?

如何与HOOK联合起来形成屏幕监视?

如何与网编联合起来实现类似远程控制?

这涉及到TCP\IP协议族的图片传输问题..(暂时不能解决)