1

特定のプロセスの GDIObjects の数を取得しようとしています。

Windows XP を使用すると、user32.dll のgetGUIResources()で可能でしたが、Windows Vista および -7 では、 で0実行されているプロセスに対して返されます..\System

GDI オブジェクト数を取得するには?

4

2 に答える 2

2

このコードを試してください。Windows 7で動作します。「タスクマネージャーでできるなら、私もできる」と思いました。管理者権限が必要かどうかはわかりませんが .

この例では、SYSTEM 資格情報で実行される winlogon.exe から情報を取得します。

私のマシンでの出力:

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

これは、タスクマネージャーが示していたものと一致します。 SYSTEM および 6 つの GDI オブジェクトを示す winlogon.exe

#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 に答える