Как вывести фронтальный или запустить браузер в Delphi - PullRequest
2 голосов
/ 10 июля 2009

Мне нужно либо вывести переднее окно браузера, если оно уже запущено, либо запустить браузер из моего приложения. Сейчас я использую ShellExecute для открытия нового браузера, но в конечном итоге он создаст много экземпляров или вкладок браузера. Так как проверить, запущен ли браузер, и переключить приложение на браузер?

Я сейчас использую это:

ShellExecute(Handle, 'open', URL, nil, nil, SW_SHOWNORMAL);

Ответы [ 3 ]

3 голосов
/ 10 июля 2009
function EnumProcess(Handle: HWND; lParam: Integer): BOOL; stdcall;
var
  PID : Cardinal;
  Title : String;
begin
  If Handle = NULL Then
    begin
    Result := False;
  end
  Else
    begin
    GetWindowThreadProcessID(Handle,PID);
    If PID = lParam Then
    begin
      SetForegroundWindow(Handle);
      Result := False;
    end
    else
      Result := True;
  end;
end;

procedure TMainForm.StartBrowser();
var
  h: HWND;
  S: tagPROCESSENTRY32;
  bFound: boolean;
begin
  h := CreateToolHelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  S.dwSize := SizeOf(tagPROCESSENTRY32);
  Process32First(h, S);
  bFound := false;
  while Process32Next(h, S) do
  begin
    if Pos('iexplore', LowerCase(S.szExeFile)) <> 0 then
    begin
      bFound := true;
      EnumWindows(@EnumProcess,Integer(Pointer(S.th32ProcessID)));
    end;
  end;
  if (not bFound) then
    ShellExecute(Handle, 'open', 'http://www.stackoverflow.com', nil, nil,         SW_SHOWNORMAL);
end;
1 голос
/ 10 июля 2009

То, как вы это делаете, это способ открыть браузер по умолчанию. Проблема заключается в том, что IE и Firefox всегда будут открывать документ вместо того, чтобы вывести соответствующую вкладку вперед.

Я подумал, что вы могли бы делать что-то для браузера с помощью переключателей командной строки. В этом случае вы должны получить браузер по умолчанию из HKEY_CLASSES_ROOT \ HTTP \ shell \ open \ command.

К сожалению, ни один из двух основных браузеров не имеет переключателя, чтобы открывать только URL, который еще не открыт. (IE переключается здесь , Firefox переключается здесь ). Кроме того, во времена просмотра без вкладок я бы посоветовал вам взглянуть на EnumWindows , чтобы найти соответствующий сеанс, но это больше не работает, AFAIK.

Мой совет:

  1. Проверить браузер по умолчанию
  2. Для IE используйте код Icebob . Также используйте этот или ваш текущий код ShellExecute для браузеров, которые вы явно не поддерживаете.
  3. Для Firefox, зайдите на developer.mozilla.org. Должен быть какой-то путь.
  4. То же самое для webkit (Chrome, Safari) и Opera.

Или жить с дубликатами. В этом случае ваш код ShellExecute идеален.

Я бы, наверное, жил с дубликатами.

0 голосов
/ 11 июля 2009

Лучше всего использовать DDE, чтобы найти существующее окно.

Кроме того, жесткое кодирование открытого глагола не очень хорошая идея, лучше передать NULL / nil

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...