Automating external instances of Internet Explorer in C#

  • Thread starter Thread starter SunshineGirl
  • Start date Start date
S

SunshineGirl

I'm trying to receive events from a running instance of Internet Explorer.
So far I've only been able to receive events from an instance I launch from
code, but I need to receive events from all running instances of Internet
Explorer (I mean those that the user launches himself).

I know this is possible because I did it three months ago. Unfortunately, I
can't find the code. I've already looked at all the Microsoft articles on
automating Internet Explorer, so please don't suggest those links.

Thanks in advance.
 
Hello,

Thanks for your post. As I understand, you want to connect to a running
instance of Internet Explorer. If so, please refer to the KB article 176792.

HOWTO: Connect to a Running Instance of Internet Explorer
http://support.microsoft.com/?id=176792

Hope this helps.

Regards,

HuangTM
Microsoft Online Partner Support
MCSE/MCSD

Get Secure! -- www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
 
Thanks, but I've already seen this article, as all other Microsoft articles
that deal with connecting to Internet Explorer.

As in this article, I have code that cycles through ShellWindows and gets a
reference to each running instance of Internet Explorer. That's where I
connect to the IE events, but they simply don't fire.


static private SHDocVw.ShellWindows shellWindows = new
SHDocVw.ShellWindowsClass();
static private SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler
beforeNavigate2;
static private SHDocVw.DWebBrowserEvents2_NewWindow2EventHandler newWindow2;

public static void Main()
{
foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
MessageBox.Show("ie.Location:" + ie.LocationURL);
ie.BeforeNavigate2 += beforeNavigate2;
ie.NewWindow2 += newWindow2;
}
}

The message box displays the URL, but the events simply don't fire.
 
Hello,

Thanks for your response. Based on my research, I am able to receive the IE
event on my side. I now share the following information with you:

1. You will need to create a WinForm application instead of Console
application.
2. I reviewed your code, it seems that the delegates are not mapped to
methods. Please refer to the following code snippet:

//--------------code snippet----------------------
public class Form1 : System.Windows.Forms.Form
{
static private SHDocVw.ShellWindows shellWindows = new
SHDocVw.ShellWindowsClass();

public Form1()
{
InitializeComponent();

foreach(SHDocVw.InternetExplorer ie in shellWindows)
{
MessageBox.Show("ie.Location:" + ie.LocationURL);
ie.BeforeNavigate2 += new
SHDocVw.DWebBrowserEvents2_BeforeNavigate2EventHandler(this.ie_BeforeNavigat
e2);
}

public void ie_BeforeNavigate2(object pDisp , ref object url, ref
object Flags, ref object TargetFrameName, ref object PostData, ref object
Headers, ref bool Cancel)
{
MessageBox.Show("event received!");
}
//----------------end of----------------------------

Please check it on your side.

Have a nice day!

Regards,

HuangTM
Microsoft Online Partner Support
MCSE/MCSD

Get Secure! -- www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
 
Nope. Your code does exactly what my code does, and it doesn't fire the
event. I'm running Windows 2000 here. I'll test it tonight on Windows XP.
But this solution must work on Windows 2000 as well. Any ideas?

Andy
 
You're right. It works, but only under XP. I'm not receiving any events
under Windows 2000.

Is there a reason?
 
Hi,

As stated in my previous reply, it works properly on my Windows 2000
systems. I think more information is needed before moving forward:

1. Did you install .NET Framework 1.1 on your Windows 2000?
2. Did you apply Windows 2000 Service Pack 3?
3. What's the version of IE on your Windows 2000?
4. Please try my sample attached in my previous post.

I am standing by for your response.

Regards,

HuangTM
Microsoft Online Partner Support
MCSE/MCSD

Get Secure! -- www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
 
Thank you for not abandoning me.

1. I have the .NET Framework 1.0.3705 and 1.1 installed (same as on my XP
system).
2. I have Windows 2000 with Service Pack 4.
3. I have Internet Explorer 6.0.2800.1106 with Service Pack 1 and Q828750.
4. I have tried your code, with the same result.

I know it shouldn't make any difference, but I should mention that on the
Windows 2000 system, I also have Visual Studio 6 installed. I had to go
through extensive tinkering as per the following article
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnvid/html/
msdn_videbugging.asp
to enable debugging in Interdev.

Also, it just occurred to me that I have Visual Studio .NET Professional
2002 on the Windows 2000 system, and Visual Studio .NET Enterprise Architect
2003 on the XP system.

Thanks again.
 
Hello,

Thanks for your reply. It's strage that I am not able to reproduce the
problem on my Windows 2000 test sytems with similar configuration (Win2K
SP4, IE6 SP1, .NET Framework 1.1). To narrow down the problem, I recommend
you build a new Windows 2000 system with .NET Framework 1.1 and check if
the problem persists on your side.

Hope this helps.

Regards,

HuangTM
Microsoft Online Partner Support
MCSE/MCSD

Get Secure! -- www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
 
Thanks.

I take back what I said. Your executable works on all the Windows 2000
systems I've tried it on. But when I compile your source code using VS.NET
2002 the event doesn't fire on the two computers that have VS.NET 2002
installed, but it fires on a clean Windows 2000 system with just the .NET
Framework 1.1 installed and no VS.NET.

I will try compiling the same code on XP with VS.NET 2003, then run it on
the same Windows 2000 computers to see if it has to do with VS.NET 2002, but
right now it looks like the culprit.
 
Hello,

Thanks a lot for your update. It seems that the application only works on
..NET Framework 1.1. I suggest that you can configure your application to
run against .NET Framework 1.1 only with its .config file looks like:

<configuration>
<startup>
<supportedRuntime version="v1.1.4122"/>
</startup>
</configuration>

Please refer to the following MSDN article for detailed information:
Side-by-Side Execution of the .NET Framework
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetdep/ht
ml/sidexsidenet.asp

Please feel free to let me know if any further is needed.

Regards,

HuangTM
Microsoft Online Partner Support
MCSE/MCSD

Get Secure! -- www.microsoft.com/security
This posting is provided "as is" with no warranties and confers no rights.
 
That did it!

I can't thank you enough for your help. If I had a million dollars, I'd give
it to you. You're my savior!
 
Back
Top