【发布时间】: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 是的,我找到了很多,但正如我所说,我不太明白。尝试了其中一些示例,进行了修改,但它不起作用。如果你也不知道也没关系。谢谢。