读取进程内存占用
本帖最后由 78391493 于 2009-5-18 23:04 编辑GetProcessMemoryInfo这个API函数读取某进程的内存占用怎么写,研究了半天也不知道AU3怎么写:face (30): _ProcessListProperties可以做到,不过它是用WMI实现的。 _ProcessListProperties可以做到,不过它是用WMI实现的。 顶顶还是没搞明白WMI感觉慢了点 :face (34): toptoptoptop ProcessGetStats 不是ProcessGetStats 你贴出GetProcessMemoryInfo函数的原型,并说明哪里不懂。有人会帮你解答的。 BOOL WINAPI GetProcessMemoryInfo(
__in HANDLE Process,
__outPPROCESS_MEMORY_COUNTERS ppsmemCounters,
__in DWORD cb
);
第二第三参数不知道什么意思。。。 Re 78391493:
第一个参数是进程的句柄,可以用_WinAPI_OpenProcess返回这个句柄。
第二个参数是一个结构指针,结构定义如下:
DWORDcb;
DWORDPageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
其中,前面的dword和SIZE_T是成员类型,后面的cb和PageFaultCount等是成员的名字,名字无关紧要。SIZE_T对应的autoit类型是dword。可以用DllStructCreate定义这个结构并用DllStructGetPtr返回它的指针。
第3个参数是结构的大小,可以用DllStructGetSize获取到。 奇怪 返回一直是0 $cb = DllStructCreate("dword;dword;int;int;int;int;int;int;int;int")
$cbPtr = DllStructGetPtr($cb)
$Handle = DllCall("kernel32.dll", 'int', 'OpenProcess', 'int', 0x1F0FFF, 'int', False, 'int', @AutoItPID)
$return = DllCall("psapi.dll", 'int', 'GetProcessMemoryInfo', 'long', $Handle, "ptr", $cbPtr, "dword", DllStructGetSize($cb))
MsgBox(0, "", $return)
DllCall('kernel32.dll', 'int', 'CloseHandle', 'int', $Handle)改了一下,变成空白了…… 当然会显示空白了,DllCall返回结果存储在一个数组中,GetProcessMemoryInfo返回的结果是布尔型,看下return如果是1就执行成功了。结果储存在$cb中。可以用DllStructGetData获取到。 DllStructGetData应该怎么写?越来越晕了。。。
页:
[1]
2