Почему FindWindow () не на 100% надежен?

Я использую этот код 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 () ненадежен в некоторых системах?

10
задан Casady 18 March 2013 в 04:16
поделиться