我正在寻找某些进程的 GDIObjects 计数。
使用 Windows XP 可以使用 user32.dll 的getGUIResources()
,但在 Windows Vista 和 -7 上,它会返回0
运行在 .dll 下的进程..\System
。
如何获取 GDI 对象计数?
我正在寻找某些进程的 GDIObjects 计数。
使用 Windows XP 可以使用 user32.dll 的getGUIResources()
,但在 Windows Vista 和 -7 上,它会返回0
运行在 .dll 下的进程..\System
。
如何获取 GDI 对象计数?
试试这个代码。它适用于 Windows 7。我想:“如果任务管理器可以做到,那么我可以做到”。我不确定它是否需要管理权限,但我已经用.
在示例中,我从在 SYSTEM 凭据下运行的 winlogon.exe 获取信息。
我机器上的输出:
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)
可能与访问权限有关,您的脚本无法访问具有更高权限的进程。我不确定这里,但试试这个:通过将它添加到您的脚本来以管理员权限运行您的脚本:
#RequireAdmin