我希望获得某些流程的GDIObject计数。
使用Windows XP可以使用user32.dll的getGUIResources()
,但在Windows Vista和-7上,它会为0
下运行的进程返回..\System
。
如何获取GDI对象数?
答案 0 :(得分:1)
可能是访问权限,您的脚本无法访问具有更高权限的进程。我不确定这里,但尝试一下:将脚本添加到脚本中,以管理员权限运行脚本:
#RequireAdmin
答案 1 :(得分:1)
试试这段代码。它在Windows 7上适用于我。我想:“如果任务经理可以做到,那我就可以做到”。我不确定它是否需要管理权限,但我已经使用测试。
在示例中,我从winlogon.exe获取信息,该信息在SYSTEM凭证下运行。
我机器上的输出:
Process ID: 584
Process handle: 0x00000198
GDI objects: 6
适合任务经理展示的内容。
#RequireAdmin
#include <WinAPI.au3>
Const $PROCESS_QUERY_LIMITED_INFORMATION = 0x1000
; Get ID to process
$id = ProcessExists("winlogon.exe")
If @error Then
ConsoleWrite("Error in ProcessExists: " & @error & @CRLF)
Exit
EndIf
ConsoleWrite("Process ID: " & $id & @CRLF)
; Get handle to process from the ID
$handle = _WinAPI_OpenProcess($PROCESS_QUERY_LIMITED_INFORMATION, False, $id)
If @error Then
ConsoleWrite("Error in _WinAPI_OpenProcess: " & @error & @CRLF)
Exit
EndIf
ConsoleWrite("Process handle: " & $handle & @CRLF)
; Get number of GDI objects via GetGuiResources
$gdiCount = _WinAPI_GetGuiResources(0, $handle)
If @error Then
ConsoleWrite("Error in _WinAPI_GetGuiResources: " & @error & @CRLF)
Exit
EndIf
ConsoleWrite("GDI objects: " & $gdiCount & @CRLF)
; Close handle to process
_WinAPI_CloseHandle($handle)