我正在使用这个Delphi 7代码来检测Internet Explorer是否在运行:
function IERunning: Boolean;
begin
Result := FindWindow('IEFrame', NIL) > 0;
end;
这适用于99%的IE 8、9和10系统。
但是有一些系统(不幸的是我的系统中没有,但我有两个测试人员的系统有这样的问题,它们都是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()在某些系统上不可靠?
EnumWindows()
而不是手动循环窗口。 - Remy LebeauEnumWindows
也是如此。 - David Heffernan