C# 连接到现有的Internet explorer窗口并使用C重新使用它#
我正在开发一个遗留软件,其中包括一个按钮,可以打开新的internet explorer窗口并导航到其中的特定地址。 浏览器控制器将保留对窗口的引用,这样,如果再次按下按钮,将使用同一窗口再次导航到该窗口 这基本上适用于SHDocVw.InternetExplorer对象,我只使用了“navigte”方法,它可以完美地工作。。。在Windows XP(IE 6-8)上 我们的客户希望升级到windows 7,似乎MS决定在每次您导航到与您所在的域不同的域时引发“OnQuit”事件(因此,如果我使用“Browser=new SHDocVw.InternetExplorer();”打开一个新窗口,然后使用Browser.Navigate(“www.google.com”)浏览器对象将被编组 通过阅读此问题,我似乎不是唯一一个有此问题的人,建议的解决方案是找到我打开的IE窗口并连接到它,因此我有以下功能:C# 连接到现有的Internet explorer窗口并使用C重新使用它#,c#,windows,internet-explorer,shdocvw,C#,Windows,Internet Explorer,Shdocvw,我正在开发一个遗留软件,其中包括一个按钮,可以打开新的internet explorer窗口并导航到其中的特定地址。 浏览器控制器将保留对窗口的引用,这样,如果再次按下按钮,将使用同一窗口再次导航到该窗口 这基本上适用于SHDocVw.InternetExplorer对象,我只使用了“navigte”方法,它可以完美地工作。。。在Windows XP(IE 6-8)上 我们的客户希望升级到windows 7,似乎MS决定在每次您导航到与您所在的域不同的域时引发“OnQuit”事件(因此,如果我使
private void FindIwdBrowser()
{
if (Browser != null)
return;
SHDocVw.ShellWindows shellWindows = new SHDocVw.ShellWindows();
foreach (var window in shellWindows)
{
SHDocVw.InternetExplorer foundBrowser = ((SHDocVw.InternetExplorer)window);
if (!foundBrowser.Name.EndsWith("Internet Explorer"))
continue;
if (foundBrowser.LocationURL.StartsWith(config.UrlTemplate.Substring(0, config.UrlTemplate.IndexOf("?"))))
{
Execute.OnUIThread(() =>
{
foundBrowser.OnQuit += Browser_OnQuit;
Browser = foundBrowser;
});
return;
}
}
}
- 我使用caliburn micro,希望确保它不是线程问题
- config.UrlTemplate-我要导航到的URL
提前感谢!但是常规的WebBrowserControl会使您的软件崩溃吗?也许使用IE打开的网站在稳定性方面并不出色,但是嵌入式IE中的网站不会使您的应用程序崩溃……因为我的客户端是由具有短期记忆的人组成的(也就是说,尽管我在过去两年中有两个bug,而创建网站的那些bug……更多),但我还是希望确保它明显分开,如果我没有选择的话,我自然会这样做,但我真的很想避免。此外,这对我来说是一个非常有趣的琐事:)如果在子窗口中打开WebBrowser控件时使用类似于“由Internet Explorer提供动力”的文本,或者更好!!“由Internet Explorer 6提供动力”的文本,该怎么办。这会将仇恨重定向到Microsoft:D Uhm…顺便说一句,我会选择一个简单的解决方案,而不是避免可能的客户仇恨使整个解决方案复杂化。LOL!嗯,MS自1996年以来一直为我提供工作,所以我不希望有太多仇恨指向他们,控件使用兼容模式(可通过我无权访问的注册表值更改),所以…我不能,因为我没有提供安装文件,只有一个可执行文件。你甚至可以从整个可执行文件中写入注册表项。为什么不呢?