2010-03-22 3 views
0

Мне нужно измерить все используемые объекты GDI в системе Windows xp. Я нашел метод GetGuiResources (__ в HANDLE hProcess, __in DWORD uiFlags) (с флагом GR_GDIOBJECTS). Я вызываю его для процесса, который я получаю из метода GetCurrentProcess(), определенного в WinBase.h.Как GetGuiResources для всех системных процессов?

Я не знаю, как назвать это для других системных процессов, которые я получаю через System :: Diagnostics :: Process :: GetProcesses(), потому что эта функция возвращает массив указателей процесса, а GetGuiResources берет РУЧКУ ,

Кто-нибудь знает решение для этого? Как я могу преобразовать указатель процесса в ручку или получить РУЧКИ для всех запущенных системных процессов?

За помощью заблаговременно!

+0

Это управляемый код? –

+0

Да, мне пришлось установить/clr: oldSyntax в VisualStudio, потому что код не будет компилироваться без этого. – Krzysztof

ответ

1

Использование свойства Id каждого объекта процесса массива, возвращаемого GetProcesses(), вы можете получить идентификатор каждого процесса. Затем из идентификатора вы можете получить дескриптор через API OpenProcess. Не забудьте закрыть ручку CloseHandle, когда она вам больше не понадобится.

Обратите внимание, что не может использовать объекты Объекта Процесса, поскольку он работает только для объектов, возвращаемых Process.Start.

Кстати, имейте в виду, что для новых проектов вы должны использовать новый язык C++/CLI вместо старых управляемых расширений C++.

Смежные вопросы