Win32:如何枚举子进程?

发布于 2024-08-18 10:39:39 字数 303 浏览 3 评论 0原文

在 Win32 下枚举当前正在运行的进程的子进程的最佳方法是什么?我可以想到几种方法来做到这一点,但它们似乎过于复杂和缓慢。以下是该解决方案的要求:

  1. 具体来说,我需要知道当前是否有任何正在运行的进程是由当前进程启动的。
  2. 将在 WinXP 上运行并且不需要分发特殊的 DLL。
  3. 不应需要大量 CPU 开销(它将定期在后台运行)。
  4. 我最终将在 Delphi 中编写此内容,但我可以从您拥有代码的任何语言进行转换。大多数情况下,我正在寻找最有效的 Win32 API 集来使用。

谢谢!

What's the best way to enumerate the child processes of the currently running process under Win32? I can think of a couple of ways to do it, but they seem overly complicated and slow. Here's the requirements for the solution:

  1. Specifically I need to know if any there are any processes currently running which were started by the current process.
  2. Will be running on WinXP and should not require distributing special DLL's.
  3. Should not require a lot of CPU overhead (it will be running periodically in the background).
  4. I'll eventually be writing this in Delphi, but I can convert from whatever language you have the code in. Mostly I'm looking for the most efficient set of Win32 API's to use.

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

暖阳 2024-08-25 10:39:39

您可以使用 toolhelp API

#include <tlhelp32.h>

Process32First() 

并使用

Process32Next()

http://www.codeproject.com/KB/ 循环线程/processes.aspx

编辑delphi

uses tlhelp32;

procedure FillAppList(Applist: Tstrings); 
var   Snap:THandle; 
        ProcessE:TProcessEntry32; 
begin 
     Applist.Clear; 
     Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
     ProcessE.dwSize:=SizeOf(ProcessE); 
     if Process32First(Snap,ProcessE) then 
     begin 
          Applist.Add(string(ProcessE.szExeFile)); 
          while Process32Next(Snap,ProcessE) do 
                 .. compare parent id
      end 
      CloseHandle(Snap); 
end;

You could use the toolhelp API

#include <tlhelp32.h>

Process32First() 

And loop using

Process32Next()

http://www.codeproject.com/KB/threads/processes.aspx

EDIT delphi

uses tlhelp32;

procedure FillAppList(Applist: Tstrings); 
var   Snap:THandle; 
        ProcessE:TProcessEntry32; 
begin 
     Applist.Clear; 
     Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
     ProcessE.dwSize:=SizeOf(ProcessE); 
     if Process32First(Snap,ProcessE) then 
     begin 
          Applist.Add(string(ProcessE.szExeFile)); 
          while Process32Next(Snap,ProcessE) do 
                 .. compare parent id
      end 
      CloseHandle(Snap); 
end;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文