Windows 7 获取进程GDI对象计数

Windows 7 获取进程GDI对象计数,windows-7,windows-vista,autoit,Windows 7,Windows Vista,Autoit,我希望得到某些进程的GDIObjects计数 使用Windows XP,user32.dll的getGUIResources()是可能的,但在Windows Vista和-7上,对于在下运行的进程,它返回0。\System 如何获取GDI对象计数?可能与访问权限有关,您的脚本无法访问具有更高权限的进程。虽然我不确定,但请尝试一下:通过将以下内容添加到脚本中,以管理员权限运行脚本: #RequireAdmin 试试这个代码。它在Windows7上适用于我。我想:“如果任务经理能做到,那么我就能做

我希望得到某些进程的GDIObjects计数

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


如何获取GDI对象计数?

可能与访问权限有关,您的脚本无法访问具有更高权限的进程。虽然我不确定,但请尝试一下:通过将以下内容添加到脚本中,以管理员权限运行脚本:

#RequireAdmin

试试这个代码。它在Windows7上适用于我。我想:“如果任务经理能做到,那么我就能做到。”。我不确定它是否需要管理权限,但我已经用进行了测试

在本例中,我从winlogon.exe获取信息,该文件在系统凭据下运行

我的机器上的输出:

Process ID: 584
Process handle: 0x00000198
GDI objects: 6
这与任务管理器显示的内容相符。

#RequireAdmin
#包括
Const$PROCESS\u QUERY\u LIMITED\u INFORMATION=0x1000
; 获取要处理的ID
$id=ProcessExists(“winlogon.exe”)
如果@error那么
ConsoleWrite(“进程中存在错误:&@Error&@CRLF)
出口
恩迪夫
控制台写入(“进程ID:&$ID&@CRLF)
; 从ID获取进程的句柄
$handle=\u WinAPI\u OpenProcess($PROCESS\u QUERY\u LIMITED\u INFORMATION,False,$id)
如果@error那么
控制台写入(“WinAPI OpenProcess中的错误:&@Error&@CRLF)
出口
恩迪夫
控制台写入(“进程句柄:&$handle&@CRLF)
; 通过GetGuiResources获取GDI对象的数量
$gdiCount=\u WinAPI\u GetGuiResources(0,$handle)
如果@error那么
ConsoleWrite(“WinAPI获取GUI资源中的错误:&@Error&@CRLF)
出口
恩迪夫
控制台写入(“GDI对象:&$gdiCount&@CRLF)
; 关闭进程的句柄
_WinAPI_CloseHandle($handle)

谢谢你的回答,我按照你的建议做了尝试。但据我所知:没有机会获得这些信息(也有管理员权限)。ProcessExplorer之类的程序似乎也没有解决方案。
#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)