这是我学习汇编写的一个程序移出来的代码,编译成LIB基础类在我的资源共享里,欢迎大家测试。目前为0.1版,未优化功能也不太全以后在弄吧呵呵。
以下是此LIB使用说明,我的环境为 XPsp3 +RADASM。有啥米问题QQ:285979593留言哒。
;关于每个函数的返回值可以根据自己需要建立相应的结构
;此0.1版本未优化,功能也不太全以后在弄吧呵呵,由于是通用控件你可以通过窗口获得句柄发送相应的消息或重构来操作一些常规功能。
;未来版本打算支持XML数据绑定,建立虚拟节点,及一些常规功能。
; 第一步 invoke CreateClass,parent,_x,_y,_w,_h ;初始控件的大小
;返回exe为一个结构,根据自己需要可以对控件重构事件,不需要就不要理它了,呵呵
;base struct
; hXTree dd ?
; hTv dd ?
; hList dd ?
; Header dd ?
; XTreeProc dd ?
; TvProc dd ?
; ListProc dd ?
; HeaderProc dd ?
; NewListProc dd ?
; NewTvProc dd ?
;base ends
;第二步 ;invoke InsertColumn,@lx,@pText ;添加Header列大小及名称
;invoke InsertColumn,50,CADD("PID")
;invoke InsertColumn,80,CADD("PPID")
;invoke InsertColumn,80,CADD("Handles")
;invoke InsertColumn,80,CADD("Threads")
;第三步 ;invoke TreeAddItem,offset ClassName ,0 ;添加Tree节点
;invoke TreeAddItem,offset ClassName ,edx
; eax 为一个双向链表数据结构
; ecx 返回总的行数
; edx 返回一个TREE节点句柄
;第四步 ;invoke ListAddItem,edx,1,offset ClassName;添加对应节点的多列数据
;invoke ListAddItem,edx,FALSE,1,offset ClassName
;tree节点句柄,LIST列,设置或获取一个节点,添加到LIST字符串
;invoke ListAddItem,edx,TRUE,2,offset ClassName
;至此收功完毕,以下是LIB类导出函数的使用说明(^_^以后再完善)
;初始创建并指定父窗口及大小
CreateClass PROTO :DWORD, :DWORD, DWORD,:DWORD
;初始一个Header。列宽度,列标题
InsertColumn PROTO :DWORD,:DWORD
;插入一个Tree节点。字符缓冲区指定一个节点名,父节点
TreeAddItem PROTO :DWORD,:DWORD
;设置或获得一个节点的数据项。 Tree节点句柄,(FLASE为添加一个数据项/TRUE为设置一个数据项),要获得或设置数据的列索引,字符缓冲区
ListAddItem PROTO :DWORD, :DWORD, DWORD,:DWORD
;获得附加额外的数据项(最多256个DWORD)每一个节点。节点句柄,返回缓冲区
GetData_L PROTO :DWORD, :DWORD
;删除所有节点
Deleteallitems PROTO
;枚举所有节点. Tree节点句柄,一个回调函数接受句柄
EnuemAllNodes PROTO :DWORD, :DWORD
;枚举节点。Tree节点句柄,搜索类型(TVGN_XXX),搜索方式(TVGN_NEXT/PREVIOUS)
;是否深度搜索(FALSE/TRUE),要搜索的节点句柄,一个回调函数接受接受句柄
EnuemChildNodes PROTO :DWORD,:DWORD,DWORD,:DWORD,DWORD,:DWORD
;弹出一个窗口分离节点的子节点数据,《见图右边》。是否深度分离子节点数据。
@@PopWindow proto :dword
;以下是举例,例出当前进程
invoke CreateClass,hWin,10,10,500,300
invoke InsertColumn,170,CADD("Process")
invoke InsertColumn,50,CADD("PID")
invoke InsertColumn,80,CADD("PPID")
invoke InsertColumn,80,CADD("Threads")
invoke R3_ProcessSnapshot ;PS:这里不关心枚举进程的方式呵呵