aardio 文档

process.util 库模块帮助文档

process 成员列表

process.util

此扩展库主要在 process 基础增强了进程模块与内存搜索功能。
可兼容 64 位、32 位目标进程,兼容 32 位、64 位操作系统。
64 位系统最低要求 Win7 ,32 位最低支持 XP 系统。

process.util()

参数可指定要查找的 EXE 文件名,支持模式匹配语法。
也可以指定进程 ID,或者 process 对象。
如果指定 process 对象,则扩展其功能并返回原对象。
否则创建 process 对象并扩展其功能,然后返回该对象。

返回对象:ProcessUtilObject

ProcessUtilObject 成员列表

ProcessUtilObject.asm(机器码数组,函数原型,调用约定)

使用table数组指定任意个机器码参数,使用分号隔开,
机器码可以是字符串,结构体,数值或指针,
函数原型可省略,调用约定默认为"cdecl"

ProcessUtilObject.asmCdecl(函数原型,任意多个机器码参数)

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.asmStdcall(函数原型,任意多个机器码参数)

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.asmThiscall(函数原型,任意多个机器码参数)

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.assignToJobObject(process.job.limitKill)

绑定到作业对象,成功返回 true
作业对象示例请参考标准库 process.job.limitKill 的源码。
也可直接调用 killOnExit 函数绑定 process.job.limitKill

ProcessUtilObject.closeMainWindow()

关闭进程的主窗口,忽略隐藏窗口

ProcessUtilObject.ctrlEvent(0)

发送Ctrl+C(SIGINT信号)
信号将传递到与目标进程控制台连接的所有非分离控制台进程
64位目标进程会导致当前控制台暂时关闭

ProcessUtilObject.ctrlEvent(1)

发送Ctrl+Break(SIGBREAK信号)
信号将传递到与目标进程控制台连接的所有非分离控制台进程
64位目标进程会导致当前控制台暂时关闭

ProcessUtilObject.emptyWorkingSet()

将工作集中的内存尽可能移动到页面文件中,
应发在最小化或程序空闲内存确实暂不需要使用时调用,
不应频繁调用此函数

ProcessUtilObject.findModule()

查找并返回模块信息。
如果参数指定模块名称,则返回单个模块信息。
否则返回所有模块信息组成的数组。
没有找到模块返回 null

模块信息的 path 字段为模块文件路径。
baseAddress 字段为模块基址。
size 字段为模块大小。

ProcessUtilObject.free()

释放进程对象。
不是关闭进程,仅仅是释放对进程的控制句柄。

ProcessUtilObject.getExitCode()

该函数调用成功有两个返回值:进程退出代码,进程是否已退出

ProcessUtilObject.getInfo

获取进程信息

ProcessUtilObject.getInfo()

获取进程信息

返回对象:ProcessInfoObject

ProcessUtilObject.getInfo(infoClass,infoStruct)

如果参数 infoClass 指定非 null 数值,
并且 infoStruct 指定结构体。
在 Win8 以及之后系统获取信息到该结构体。
成功返回原结构体。

此用法内部调用 ::Kernel32.GetProcessInformation
细节请参考该 API 文档

ProcessUtilObject.getMainWindow()

返回进程的主窗口以及窗口进程ID,找不到则搜寻子进程主窗口。
查找时忽略隐藏窗口。

也可以调用 winex.mainWindows 获取主窗口。
winex.mainWindows 查找规则略有不同,请参考源码

ProcessUtilObject.getMainWindow(类名)

返回进程的指定类名的主窗口以及窗口进程ID,找不到则搜寻子进程主窗口。
类名参数支持模式匹配语法

ProcessUtilObject.getModuleBaseAddress(模块名)

返回模块基址。
模块名忽略大小写,
不指定模块名则返回应用程序基址。

此函数在返回数值过大时会返回 math.size64 对象,
转换方法符合 web.json 解析 10 进制数值的规则

ProcessUtilObject.getParentId()

获取父进程 ID

ProcessUtilObject.getPath()

返回执行程序文件完整路径。
如果该进程以管理权限运行,
则调用函数的进程也必须以管理权限运行
才能获取到路径

ProcessUtilObject.getPriorityClass()

返回进程优先级

ProcessUtilObject.getUiInfo()

获取UI线程窗口焦点,光标等信息

返回对象:guithreadinfoObject

ProcessUtilObject.handle

进程句柄

ProcessUtilObject.id

进程 ID

ProcessUtilObject.isWow64()

进程是否在64位系统上运行的32进程

ProcessUtilObject.isX64()

是否64位进程

ProcessUtilObject.kill()

杀除进程

ProcessUtilObject.killOnExit()

主进程退出时自动退出此进程

ProcessUtilObject.malloc(长度)

在目标进程分配内存空间

ProcessUtilObject.malloc(长度,访问类型)

在目标进程分配内存空间

ProcessUtilObject.malloc(长度,访问类型,分配类型)

在目标进程分配内存空间

ProcessUtilObject.mfree(指针)

释放malloc成员函数分配的内存指针

ProcessUtilObject.mfree(指针,释放长度,0x4000)

释放malloc成员函数分配的内存指针
不建议手工指定长度

ProcessUtilObject.protect(内存地址,4/*_PAGE_READWRITE*/,1)

修改内存保护属性,返回原来的保护属性,
第三个参数指定内存长度

ProcessUtilObject.readNumber(内存地址)

读取一个int整数,32位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"BYTE")

读取一个字节,8位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"INT")

读取一个int整数,32位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"LONG")

读取一个long类型整数,64位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"WORD")

读取一个word类型整数,16位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"byte")

读取一个字节,8位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"long")

读取一个long类型整数,64位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"word")

读取一个word类型整数,16位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumberPtr(内存地址)

读取 int 整数的指针,
然后用在指针指向的内存读取读取数值。
可用参数 @2 指定静态类型,用法同 readNumber 函数。

ProcessUtilObject.readPtr()

读取指针地址。
64 位进程读取 8 字节并返回 math.size64 对象。
32 位进程读取 4 字节并返回数值。

ProcessUtilObject.readString(内存地址,长度)

读取定长字符串
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStringPtr(内存地址,长度)

在参数指定的地址读取字符串指针,
然后用在指针指向的内存读取字符串。

ProcessUtilObject.readStringUtf16(内存地址,长度)

读取定长 Unicode 字符串,
返回字符串转换为UTF8编码。
注意长度以字符为单位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStringUtf16Ptr(内存地址,长度)

在参数指定的地址读取字符串指针,
然后用在指针指向的内存读取定长 Unicode 字符串。
返回字符串转换为UTF8编码。
注意长度以字符为单位

ProcessUtilObject.readStruct(内存地址,结构体)

读取定义的结构体
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStructPtr(内存地址,结构体)

在参数指定的地址读取结构体指针,
然后用在指针指向的内存读取结构体

ProcessUtilObject.remoteApi

在外部进程内创建远程调用函数

ProcessUtilObject.remoteApi("void()","dll名","函数名")

参数(函数原型,加载DLL模块名,函数名,调用约定)
不指定调用约定时默认使用stdcall调用约定
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.remoteApi("void()","dll名","函数名","cdecl,borland")

参数(函数原型,加载DLL模块名,函数名,调用约定)
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.remoteApi("void()",CALL地址,调用约定)

参数(函数原型,CALL地址,调用约定)
不指定调用约定在数时默认使用stdcall调用约定

ProcessUtilObject.remoteApi("void(INT thisAddr)","dll名","函数名","thiscall")

参数(函数原型,加载DLL模块名,函数名,调用约定)
thiscall使用第一个参数指定this指针地址
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.resume()

恢复运行

ProcessUtilObject.searchMemory(strRegEx,count,baseAddress,size)

搜寻 @baseAddress 指定基址的内存。
@baseAddress 可指定数值或 math.size64 对象。
如果不指定基址,则自动获取进程基址作为参数。
@size 指定要搜索的内存长度,不指定则搜索所有可用内存(不要这样做)。
@strRegEx 指定模搜索的字符串数据,支持正则表达式(不是模式匹配)。
@strRegEx 可省略(这样做没有意义)。

count 指定返回结果的数目,0 为返回所有结果,
如果 @count 为负数则查询其绝对值数目的结果,并返回最后一个匹配结果
@count 为负数时返回单个值,否则返回数组。
如果没有找到匹配,返回 null 。

ProcessUtilObject.searchModuleMemory(moduleName,strRegEx,count)

搜寻指定模块内存。
@moduleName 指定模块名称,忽略大小写并支持模式匹配语法。

strRegEx 指定模搜索的字符串数据,支持正则表达式(64位系统此参数不使用模式匹配)。
在 32 位操作系统上 @strRegEx 只能使用模式匹配与正则都支持的语法。
@strRegEx 可省略(这样做没有意义)。

count 指定返回结果的数目,0 为返回所有结果,
如果 @count 为负数则查询其绝对值数目的结果,并返回最后一个匹配结果
@count 为负数时返回单个值,否则返回数组。
如果没有找到匹配,返回 null 。

ProcessUtilObject.sendMessage(hwnd,message,wParam,lParam)

向外部进程窗口发送消息
lParam如果是结构体则复制到目标进程内存,
结构体如果包含指针应当自行调用 process.malloc 分配内存并复制
发送消息涉及的用法太多,尤其是涉及到访问外部进程内存,
所涉及的知识量不能通过看几句函数说明获得,
普通用户请不要学习或使用此函数

ProcessUtilObject.setAffinity(1)

指定进程运行的CPU内核

ProcessUtilObject.setInfo(infoClass,infoStruct)

设置进程信息,成功返回 true。
infoClass 指定数值,infoStruct 指定结构体。
此函数内部调用 ::Kernel32.SetProcessInformation 。
详细用法请参考 API 文档。
在低于 Win8 的系统不执行操作

ProcessUtilObject.setPriorityClass(0x80/*_HIGH_PRIORITY_CLASS*/)

设置进程优先级

ProcessUtilObject.stillActive()

进程是否仍在运行

ProcessUtilObject.suspend()

暂停进程

ProcessUtilObject.terminate()

强行终止进程
可在参数中指定退出代码

ProcessUtilObject.tid

返回进程的主线程 ID

ProcessUtilObject.wait()

等待进程关闭,
可选使用一个毫秒值参数设定超时
超时或失败返回 false,
进程已退出则返回值1为true,返回值2为退出代码

ProcessUtilObject.waitMainWindow

等待并返回进程主窗口以及窗口进程ID。
也可调用 winex.mainWindows 且指定参数 @2 为 true 以等待主窗口。
winex.mainWindows 查找规则略有不同,请参考源码

ProcessUtilObject.waitMainWindow(类名,等待窗口句柄)

等待并返回进程主窗口以及窗口进程ID。
所有参数可选。
可选指定要等待的类名,类名参数支持模式匹配语法,
不指定类名时忽略隐藏窗口,
可选指定等待窗口句柄,该窗口关闭时些函数不再等待并直接返回结果

ProcessUtilObject.waitOne()

等待进程关闭,不阻塞UI消息循环,
可选使用一个毫秒值参数设定超时
超时或失败返回 false,
进程已退出则返回值1为true,返回值2为退出代码

ProcessUtilObject.write(内存地址,任意个字符串或结构体参数)

写入数据,成功返回写入尾部内存地址,
失败返回空

ProcessUtilObject.writeNumber(内存地址,0)

写入一个int整数,32位

ProcessUtilObject.writeNumber(内存地址,0,"BYTE")

写入一个字节,8位无符号

ProcessUtilObject.writeNumber(内存地址,0,"INT")

写入一个int整数,32位无符号

ProcessUtilObject.writeNumber(内存地址,0,"LONG")

写入一个long类型整数,64位无符号

ProcessUtilObject.writeNumber(内存地址,0,"WORD")

写入一个word类型整数,16位无符号

ProcessUtilObject.writeNumber(内存地址,0,"byte")

写入一个字节,8位

ProcessUtilObject.writeNumber(内存地址,0,"long")

写入一个long类型整数,64位

ProcessUtilObject.writeNumber(内存地址,0,"word")

写入一个word类型整数,16位

ProcessUtilObject.writeString(内存地址,字符串,长度)

写入字符串,长度为可选参数,
省略内存地址参数则自动分配内存,
该函数返回写入内存地址,写入长度

ProcessUtilObject.writeStringUtf16(内存地址,字符串)

写入Unicode字符串
参数可以为默认的UTF8编码文本

ProcessUtilObject.writeStruct(内存地址,结构体)

写入定义的结构体,
省略内存地址参数则自动分配内存,
该函数返回写入内存地址,写入长度

Markdown 格式