我如何列举另一个过程'德尔福的窗户?

时间:2013-03-19 12:32:15

标签: windows delphi winapi

我有一个流程foo.exe,可以使用bar.exe功能创建流程CreateProcess。我希望(在foo.exe中)枚举在bar.exe中创建的窗口的控件,为此我(假设我)需要窗口HWND。

我知道bar.exe中的所有窗口类,并且bar.exe一次只为每个类创建一个窗口,因此我可以使用类名来查找我想要的窗口。

但是我应该使用什么函数来枚举另一个进程中的窗口?我正在寻找带有进程句柄或PID(由CreateProcess函数返回)和EnumProc回调过程的东西。我应该找到bar.exe的线程ID(它是单线程应用程序)并将其与EnumThreadWindows函数一起使用吗?

1 个答案:

答案 0 :(得分:6)

  1. 致电EnumWindows以枚举顶级窗口。
  2. 将每个顶级窗口句柄传递给GetWindowThreadProcessId,以找出与之关联的进程ID。
  3. 当您找到与您的进程ID匹配的顶级窗口时,请检查该窗口是否是应用程序的主窗口,可能是通过检查其类名称。
  4. 最后,在该主窗口上调用EnumChildWindows以枚举该主窗口的所有子项。