1

我正在寻找某些进程的 GDIObjects 计数。

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

如何获取 GDI 对象计数?

4

2 回答 2

2

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

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

我机器上的输出:

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

这符合任务管理器显示的内容。 winlogon.exe 显示 SYSTEM 和 6 个 GDI 对象

#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)
于 2011-03-10T10:20:12.480 回答
1

可能与访问权限有关,您的脚本无法访问具有更高权限的进程。我不确定这里,但试试这个:通过将它添加到您的脚本来以管理员权限运行您的脚本:

#RequireAdmin
于 2011-02-26T17:31:04.497 回答