Я использую этот код Delphi 7, чтобы определить, работает ли Internet Explorer:
function IERunning: Boolean;
begin
Result := FindWindow('IEFrame', NIL) > 0;
end;
Это работает на 99% систем с IE 8,9 и 10.
Но есть некоторые системы (к сожалению, ни одна из моих, но у меня есть два бета-тестера, у которых есть такие системы, обе Win7 x64 SP1), где FindWindow () возвращает 0 для IEFrame, даже если 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 () ненадежен в некоторых системах?