我正在使用这个 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() 在某些系统上不可靠?