Iexplorer event sinking

Posted on 2004-10-19
Last Modified: 2010-04-05
Hello Experts.

 Ive looked through many solutions from the last 4 yrs and was wondering how one would set a hook to monitor everytime the default browser is opened (created process) and the listboxEx contains text (Uniform Resource Locator). I downloaded the EventSinkImp utility delphi unit and it seems to work great on IE except it involves you to physically invoke the browser in order to connect() to it and monitor it's events/msg's via pressing of a button. Are there any solutions that only monitor links in the address bar which then immediately report to your delphi app? I dont want to have to click a button to monitor something, everytime a new window of IE opens I want it to report the URL or everytime the text changes I want it to add to a list of already listed URLs. The event sink component seems to work great but I do NOT want to have to press a button everytime I run it to launch IE. You can download the component and demo here

 I'm open to any coding techniques which does NOT require you to click a button to start the message event listening on the browser. I'd like to hook it in some fashion to avoid user interaction (pressing of a button).

Question by:alloc
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 5
  • 3
LVL 26

Expert Comment

ID: 12358573
Run the code in the button click in the FormShow, DUH!

Now, what if someone's default browser is FireFox or Opera, or Netscape, or Mozilla? How do you plan on getting those URLs?

Author Comment

ID: 12362504
Well Ive already tried that, I'm not that clueless, and what happens is the demo project requires the code under the button click event to execute the browser in order to sink it's messages. In other words it opens the browser and I dont want to do this. I only want to execute IExplorer.exe directly rather than through my project code to have it auto-hook these messages.

And in regards to "what if someone's default browser is FireFox or Opera, or Netscape, or Mozilla? How do you plan on getting those URLs?" I'm only mainly concerned about Ineternet Explorer at this point in time.


Author Comment

ID: 12373971
Maybe it would be better to use this funtion on a timer:

function Get_URL(Servicio: string): String;
 Cliente_DDE: TDDEClientConv;
  Result := '';
  Cliente_DDE:= TDDEClientConv.Create( nil );
  with Cliente_DDE do
      SetLink( Servicio,'WWW_GetWindowInfo');
      Result := StrPas(RequestData('0xFFFFFFFF'));

// And call it with Get_Url('IExplore');

And to avoid repeats filter the returned strings (URLs) in a stringlist then place them into a listbox so that I only get new Urls and not repeated (idle) pages left open in the browser.

 Would this work, or would it be better to hook the browser using event sinking? I'm open to suggestions and could use an example or a decent string compare function for what I want to do.
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!


Author Comment

ID: 12398071
LVL 26

Expert Comment

ID: 12399846
If you do that, you need to have it in a separate thread as it will hog resources and possibly run the CPU% to a high level.

I'm going to take the eventsink demo and do something that I just thought of. I'll get back with you.

Author Comment

ID: 12403437
Ok, yea I imagine it would do that
LVL 26

Accepted Solution

EddieShipman earned 500 total points
ID: 12403912
OK, I was able to use IShellWindows to connect to an already open instance of IE. No button clicking necessary.

Here's how I did it:

procedure TForm1.FormShow(Sender: TObject);
  ShellWindow: IShellWindows;
  spDisp: IDispatch;
  k: Integer;
    // get the running instance of Internet Explorer
    ShellWindow := CoShellWindows.Create;
    for k := 0 to ShellWindow.Count do
      spDisp := ShellWindow.Item(k);
      if spDisp = nil then Continue;
      // QueryInterface determines if an interface can be used with an object
      spDisp.QueryInterface(IWebBrowser2, FIE);
      { tell IE that DWebBrowserEvents21 wants to start receiving events }
      FIE.Visible := True;
    ShowMessage ('Unable to establish connection with Internet Explorer. Make sure you have IE4 installed!');
  end;  { except }

Now you can do whatever you want. I do not know how to continually check to see if the IShellWindows collection
changes. That would be a different question altogether. Good luck...

Author Comment

ID: 12405243
k I'll mess with it thanks...
Might post again about this subject in the future if I cannot resolve a way to update the listbox.


Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Delphi 2 92
How to create virtual printer while installing my application 5 85
Delphi Firemonkey : user drawing in window 3 58
QuickReport, Delphi, Shape 12 49
The uses clause is one of those things that just tends to grow and grow. Most of the time this is in the main form, as it's from this form that all others are called. If you have a big application (including many forms), the uses clause in the in…
Introduction I have seen many questions in this Delphi topic area where queries in threads are needed or suggested. I know bumped into a similar need. This article will address some of the concepts when dealing with a multithreaded delphi database…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit If you want to manage em…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question