特定のプロセスの GDIObjects の数を取得しようとしています。
Windows XP を使用すると、user32.dll のgetGUIResources()
で可能でしたが、Windows Vista および -7 では、 で0
実行されているプロセスに対して返されます..\System
。
GDI オブジェクト数を取得するには?
特定のプロセスの GDIObjects の数を取得しようとしています。
Windows XP を使用すると、user32.dll のgetGUIResources()
で可能でしたが、Windows Vista および -7 では、 で0
実行されているプロセスに対して返されます..\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