【问题标题】:Get Window Title if I only have the PID (Process ID)如果我只有 PID(进程 ID),则获取窗口标题
【发布时间】:2016-04-16 00:03:38
【问题描述】:

使用 Delphi(在本例中为 Delphi 7),如何从 PID(进程 ID)获取窗口标题。

我正在尝试捕获“Internet Explorer / Chrome”窗口标题。

到目前为止我的代码:

procedure GetAllBrowserTitle;
var
  hProcSnap    : THandle;
  pe32         : TProcessEntry32;
  P            : string;
  PID          : integer;
  ContinueLoop : BOOL;
begin

  try
    hProcSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

    if hProcSnap = INVALID_HANDLE_VALUE then exit;

    pe32.dwSize  := SizeOf(pe32);
    ContinueLoop := Process32First(hProcSnap, pe32);

    While (Integer(ContinueLoop) <> 0) do
    begin

      P := LowerCase(pe32.szExeFile);

      if (Pos('iexplore.exe', P) > 0) Or (Pos('chrome.exe', P) > 0) then
      begin
        PID   := pe32.th32ProcessID;
        // Get the Window Title
        // ???
      end;

      ContinueLoop := Process32Next(hProcSnap, pe32);
    end;

    CloseHandle(hProcSnap);

  except
  end;
end;

我不知道的部分是获取窗口标题。根据我的研究,所有示例都需要窗口句柄或使用我不太了解的 EnumWindow 回调。

如果你能帮忙,请。

谢谢。

【问题讨论】:

  • Chrome 可能有许多进程。有些进程确实拥有任何窗口。一些进程拥有许多窗口。 Chrome 对不同的浏览器标签使用不同的进程。虽然您可能不了解EnumWindow,但如果它是解决您问题的正确功能,您将需要学习如何使用它。在继续编码之前,您需要停止正在做的事情并理解问题。试图解决没有正确陈述的问题是没有意义的。
  • "...不拥有任何窗口..." :-)
  • “我不太了解的 EnumWindow 回调” - 然后在谷歌上搜索 Delphi 使用 EnumWindows 的示例 - 有很多......
  • @DavidHeffernan 我知道chrome会有很多进程,没关系。我希望有一种方法可以从 PID 获取窗口标题。如果它没有任何窗口,标题将为空或空白或其他。
  • @Arioch'The 是的,我找到了很多,但正如我所说,我不太明白。尝试了其中一些示例,进行了修改,但它不起作用。如果你也不知道也没关系。谢谢。

标签: delphi delphi-7


【解决方案1】:

有了 PID 后,您可以通过 2 种方式发现它创建的窗口。

  1. 调用EnumWindows() 枚举所有顶级窗口。你传给它的回调函数可以使用GetWindowThreadProcessId()来检查每个窗口是否属于该PID。

  2. 使用CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD)Thread32First()Thread32Next()枚举所有正在运行的线程,寻找属于PID的线程,在每个匹配的线程上调用EnumThreadWindows()

请注意,在这两种情况下,您将仅枚举顶级窗口。如果目标进程创建子窗口而不是顶层窗口,尤其是为了将这些子窗口托管在不同进程的其他窗口中,那么您将不得不使用#1,但忽略顶层窗口的 PID 并使用EnumChildWindows() 枚举其子窗口,而在子窗口上使用GetWindowThreadProcessId()

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 2010-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-09
    • 2017-08-12
    相关资源
    最近更新 更多