如何为Windows Task Manager提供有关程序的子进程的更多信息?

时间:2019-05-09 09:33:08

标签: c windows delphi winapi

让我们以Firefox为例。 Screenshot of task manager

它显示所有子进程的cpu,内存等。在我们的应用程序中,此信息全部为空白,仅显示主应用程序的总数。

我正在尝试向Taskmanager提供此信息,因此用户可以更好地了解应用程序的插件的运行方式-性能方面。

我可以获取进程内存/堆,并为子进程使用类似的代码。粗略的例子。

processheap = GetProcessHeap();
crtheap = (HANDLE)_get_heap_handle();
dllcrtheap = dllGetCrtHeap();

但是,问题是,到目前为止,任何搜索结果都只能提供提示和指南,以帮助您从任务管理器中“获取”信息,或者如何使用任务管理器。根本不是我要找的东西,这让我想知道这是否只是应该自动运行的东西-还是没人需要做这样的事情。

简而言之-我们可以在win32-c中实现回调事件以确保应用程序被“询问”以提供有关其进程的更多信息吗?


不确定是否相关(例如,可能会自动显示Windows子进程)win32代码调用一个delphi dll插件,该插件通过一个简单的步骤自行启动:

TFrmMain.Create(nil);
FrmMain.Show();

然后保持活动状态,它将作为主要应用程序的子级出现在taskmanager中。 (但没有CPU /磁盘信息)

以以下方式(作为dll)加载插件:

pluginInfo.hInstance = LoadLibrary(szFile);
(FARPROC)pluginInit = GetProcAddress(pluginInfo.hInstance, "pluginInit");
pluginInfo.plugin = pluginInit();
pluginInfo.plugin->event("demo");

pluginInit(); // is an stdcall in the delphi code which returns a structure with the plugin event callback, 
              // it's name and which events it will accept.
event(); // is an stdcall which launches the app, basically showing the plugin as a dialog:
    FrmMain := TFrmMain.Create(nil);
    FrmMain.Show();

除此之外,实际上没有任何有关“启动”插件的代码。它由C代码作为dll加载,询问事件处理程序proc地址,然后调用以启动它。

0 个答案:

没有答案