如何在Delphi中枚举另一个进程的窗口?

我有一个进程foo.exeCreateProcess函数创build一个进程bar.exe 。 我想(在foo.exe )枚举在bar.exe创build的窗口的控件, bar.exe (假设我)需要窗口HWND。

我知道bar.exe所有窗口类, bar.exe bar.exe只为每个类创build一个窗口,所以我可以使用类名来find我想要的窗口。

但是我应该用什么函数来枚举另一个进程中的窗口? 我正在寻找一些进程句柄或PID(都由CreateProcess函数返回)和一个EnumProccallback过程。 我应该findbar.exe的线程ID(它是一个单线程应用程序),并使用EnumThreadWindows函数?

Solutions Collecting From Web of "如何在Delphi中枚举另一个进程的窗口?"

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