gpt4 book ai didi

delphi - 为什么 FindWindow() 不是 100% 可靠?

转载 作者:行者123 更新时间:2023-12-03 14:42:13 29 4
gpt4 key购买 nike

我使用这个 Delphi 7 代码来检测 Internet Explorer 是否正在运行:

function IERunning: Boolean;
begin
Result := FindWindow('IEFrame', NIL) > 0;
end;

这适用于 99% 的 IE 8,9 和 10 系统。

但是有一些系统(不幸的是我的没有,但我有两个 beta 测试人员有这样的系统,都是 Win7 x64 SP1),其中 FindWindow() 对于 IEFrame 返回 0,即使 IE 位于内存中。

所以我编写了一种替代方法来查找窗口:

function IERunningEx: Boolean;
var WinHandle : HWND;
Name: array[0..255] of Char;
begin
Result := False; // assume no IE window is present

WinHandle := GetTopWindow(GetDesktopWindow);

while WinHandle <> 0 do // go thru the window list
begin
GetClassName(WinHandle, @Name[0], 255);
if (CompareText(string(Name), 'IEFrame') = 0) then
begin // IEFrame found
Result := True;
Exit;
end;
WinHandle := GetNextWindow(WinHandle, GW_HWNDNEXT);
end;
end;

替代方法适用于 100% 的所有系统。

我的问题 - 为什么 FindWindow() 在某些系统上不可靠?

最佳答案

我猜 FindWindow 被声明返回一个 WinHandle,它是一个 THandle,它是一个带符号的 Integer。 (至少,我认为很多年前我用 Delphi 编程时就是这种情况。)

如果 IE 的窗口句柄设置了顶部位,那么它将为负数,因此您的测试将返回 False:

Result := FindWindow('IEFrame', NIL) > 0;

窗口句柄通常不会设置顶部位,但我不知道这是不可能的。

关于delphi - 为什么 FindWindow() 不是 100% 可靠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15469657/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com