【问题标题】:How to GetGuiResources for all system processes?如何获取所有系统进程的GuiResources?
【发布时间】:2010-03-22 17:08:16
【问题描述】:

我需要在 Windows xp 系统中测量所有使用的 GDI 对象。我找到了一个 GetGuiResources(__in HANDLE hProcess, __in DWORD uiFlags) 方法(带有 GR_GDIOBJECTS 标志)。我将其称为从 WinBase.h 中定义的方法 GetCurrentProcess() 获得的过程。

我不知道如何为其他系统进程调用它,我通过 System::Diagnostics::Process::GetProcesses() 获得,因为该函数返回一个进程指针数组,而 GetGuiResources 需要一个 HANDLE。

有人知道解决方案吗?如何将进程指针转换为句柄或获取所有正在运行的系统进程的句柄?

提前感谢您的帮助!

【问题讨论】:

  • 是的,我必须在 VisualStudio 中设置 /clr:oldSyntax,因为没有它,代码将无法编译。

标签: c++ winapi gdi managed-c++


【解决方案1】:

使用 GetProcesses() 返回的数组的每个 Process 对象的 Id 属性,您可以获得每个进程的 ID。然后,您可以从 ID 中通过 OpenProcess API 获取句柄。不再需要时记得用CloseHandle 关闭句柄。

请注意,您不能使用 Process 对象的 Handle 属性,因为它仅适用于 Process.Start 返回的对象。

顺便提一下,对于新项目,您应该使用新的 C++/CLI 语言而不是旧的托管 C++ 扩展。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2012-05-20
    • 2014-04-12
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多