获取进程GDI对象计数

时间:2011-02-25 13:21:33

标签: windows-7 windows-vista autoit

我希望获得某些流程的GDIObject计数。

使用Windows XP可以使用user32.dll的getGUIResources(),但在Windows Vista和-7上,它会为0下运行的进程返回..\System

如何获取GDI对象数?

2 个答案:

答案 0 :(得分:1)

可能是访问权限,您的脚本无法访问具有更高权限的进程。我不确定这里,但尝试一下:将脚本添加到脚本中,以管理员权限运行脚本:

#RequireAdmin

答案 1 :(得分:1)

试试这段代码。它在Windows 7上适用于我。我想:“如果任务经理可以做到,那我就可以做到”。我不确定它是否需要管理权限,但我已经使用测试

在示例中,我从winlogon.exe获取信息,该信息在SYSTEM凭证下运行。

我机器上的输出:

Process ID: 584
Process handle: 0x00000198
GDI objects: 6

适合任务经理展示的内容。 winlogon.exe showing SYSTEM and 6 GDI objects

#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)