• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 367
  • Last Modified:

Open a URL with Internet Explorer in a new tab (not a new window)

I am trying to get an already running instance of Internet Explorer to add a new tabbed page. This is the Delphi code I start with.:

var
  Temp : String;
begin
  if FileExists('C:\Program Files (x86)\Internet Explorer\iexplore.exe') then begin
    Temp := '"C:\Program Files (x86)\Internet Explorer\iexplore.exe"';
  end;
  if FileExists('C:\Program Files\Internet Explorer\iexplore.exe') then begin
    Temp := '"C:\Program Files\Internet Explorer\iexplore.exe"';
  end;
  ShellExecute(Handle, 'open', PChar(Temp), PChar('http://google.com'), nil, SW_SHOW);
end;

Open in new window


Although this code does display the URL (http://google.com) in IE, it does so by launching a new instance (new window) of IE rather than in a new tabbed page to the already running instance of IE.  How can I do the latter?
0
Fontographer
Asked:
Fontographer
1 Solution
 
Sinisa VukCommented:
I've managed to run multiple tabs using IE ole automation. First, check if iexplore.exe is running. If yes - then use Navigate2 function from that runing instance, but if not found - start new instance...
uses ComObj;
...
//https://msdn.microsoft.com/en-us/library/dd565688(v=vs.85).aspx
const
  navOpenInNewWindow = 1;
  navNoHistory = 2;
  navNoReadFromCache = 4;
  navNoWriteToCache = 8;
  navAllowAutosearch = 16;
  navBrowserBar = 32;
  navHyperlink = 64;
  navEnforceRestricted = 128;
  navNewWindowsManaged = 256;
  navUntrustedForDownload = 512;
  navTrustedForActiveX = 1024;
  navOpenInNewTab = 2048;
  navOpenInBackgroundTab = 4096;
  navKeepWordWheelText = 8192;
  navVirtualTab = 16384;
  navBlockRedirectsXDomain = 32768;
  navOpenNewForegroundTab = 65536;

procedure RunIEUrl(sURL: String; param: OleVariant);
var
  i: Integer;
  ShellWindows: OleVariant;
  ShellApplication: OleVariant;
  IE: OleVariant;
begin
  IE := Unassigned;
  //find running instance - using win shell
  ShellApplication := CreateOleObject('Shell.Application');
  if not VarIsEmpty(ShellApplication) then
  begin
    ShellWindows := ShellApplication.Windows;
    for i := 0 to ShellWindows.Count - 1 do
    begin
      if UpperCase(ExtractFileName(ShellWindows.Item(i).FullName)) = 'IEXPLORE.EXE' then //check exe name
      begin
        IE := ShellWindows.Item(i);
        IE.Navigate2(sURL, param);
        Break;
      end;
    end;
  end;

  //not found running instance - run new instance
  if VarIsEmpty(IE) then
  begin
    IE := CreateOleObject('InternetExplorer.Application');
    IE.Visible := true;
    IE.Navigate2(sURL);
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  RunIEUrl(Edit1.Text, navOpenInNewTab);
end;

Open in new window


Fill Edit1 with a web site url....
0

Featured Post

Free Tool: Port Scanner

Check which ports are open to the outside world. Helps make sure that your firewall rules are working as intended.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now