如何用SHDocVw.InternetExplorer控制IE的子页面?
private void button1_Click(object sender, EventArgs e)
{
SHDocVw.InternetExplorer ieObj = new SHDocVw.InternetExplorer();
ieObj.Navigate("http://www.baidu.com/");
ieObj.AddressBar = false;
ieObj.ToolBar = 0;
ieObj.Visible = true;
}
这样打开的IE,工具栏是没有了,但在IE中点击链接打开新窗口时,上面的设置失效了,如何让子页面也没有工具栏呢?
我对 ieObj 设置了NewWindow2 、NewWindow3、NewProcess、DocumentComplete、NavigateComplete2、NavigateComplete2等事件都不顶事。NewWindow2 和NewWindow3的代码如下:
IE.NewWindow2 += (ref object ppDisp, ref bool Cancel) =>
{
//这里不知道怎么取当前的IE窗口(知道的大侠请告之),所以只好操作所有的IE窗口。但是这个事件是在新窗口打开之前就触发了,所以这样写也没用。
SHDocVw.ShellWindows sws = new SHDocVw.ShellWindows();
foreach (SHDocVw.InternetExplorer iew in sws)
{
if (System.IO.Path.GetFileNameWithoutExtension(iew.FullName).ToLower() == "iexplore")
{ iew .ToolBar = 0; }
}
}
IE.NewWindow3 += (ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl) =>
{
//这个事件在.net4.0以上不会被触发
SHDocVw.ShellWindows sws = new SHDocVw.ShellWindows();
foreach (SHDocVw.InternetExplorer iew in sws)
{
if (System.IO.Path.GetFileNameWithoutExtension(iew.FullName).ToLower() == "iexplore")
{ iew .ToolBar = 0; }
}
}
所以,问题的核心是:怎么才能取到子网面的窗口对象,即新窗口对应的SHDocVw.InternetExplorer 对象。
请不要用WebBrowser控件来解答,我就是想操作IE窗口而不是WebBrowser控件。当然,不用SHDocVw.InternetExplorer 而用其它技术也能达到要求的方法都请告之在下,谢谢了!
我想到一个笨方法就是:监视IE的进程,一旦发现新IE进程就执行我需要逻辑,但网上找到的方法都是要取得所有进程后再列遍寻找指定的进程,这样就必需要用到循环,太费CPU资源了,有没有更好的方法来监视进程?
{
SHDocVw.InternetExplorer ieObj = new SHDocVw.InternetExplorer();
ieObj.Navigate("http://www.baidu.com/");
ieObj.AddressBar = false;
ieObj.ToolBar = 0;
ieObj.Visible = true;
}
这样打开的IE,工具栏是没有了,但在IE中点击链接打开新窗口时,上面的设置失效了,如何让子页面也没有工具栏呢?
我对 ieObj 设置了NewWindow2 、NewWindow3、NewProcess、DocumentComplete、NavigateComplete2、NavigateComplete2等事件都不顶事。NewWindow2 和NewWindow3的代码如下:
IE.NewWindow2 += (ref object ppDisp, ref bool Cancel) =>
{
//这里不知道怎么取当前的IE窗口(知道的大侠请告之),所以只好操作所有的IE窗口。但是这个事件是在新窗口打开之前就触发了,所以这样写也没用。
SHDocVw.ShellWindows sws = new SHDocVw.ShellWindows();
foreach (SHDocVw.InternetExplorer iew in sws)
{
if (System.IO.Path.GetFileNameWithoutExtension(iew.FullName).ToLower() == "iexplore")
{ iew .ToolBar = 0; }
}
}
IE.NewWindow3 += (ref object ppDisp, ref bool Cancel, uint dwFlags, string bstrUrlContext, string bstrUrl) =>
{
//这个事件在.net4.0以上不会被触发
SHDocVw.ShellWindows sws = new SHDocVw.ShellWindows();
foreach (SHDocVw.InternetExplorer iew in sws)
{
if (System.IO.Path.GetFileNameWithoutExtension(iew.FullName).ToLower() == "iexplore")
{ iew .ToolBar = 0; }
}
}
所以,问题的核心是:怎么才能取到子网面的窗口对象,即新窗口对应的SHDocVw.InternetExplorer 对象。
请不要用WebBrowser控件来解答,我就是想操作IE窗口而不是WebBrowser控件。当然,不用SHDocVw.InternetExplorer 而用其它技术也能达到要求的方法都请告之在下,谢谢了!
我想到一个笨方法就是:监视IE的进程,一旦发现新IE进程就执行我需要逻辑,但网上找到的方法都是要取得所有进程后再列遍寻找指定的进程,这样就必需要用到循环,太费CPU资源了,有没有更好的方法来监视进程?
...全文
相关推荐
添加有关SHDocVw和mshtml的引用的代码
控制IE浏览器进行自动化操作**在提供的代码示例中,演示了如何使用C#和上述两个库来实现对IE浏览器的自动化操作:- **初始化IE浏览器**:通过`new InternetExplorer();`语句创建一个新的
shdocvw.dll
例如,开发者可以利用SHDocVw.InternetExplorer对象来创建或控制一个隐藏或可见的IE实例,实现自动化脚本、网页数据抓取等多种用途。
SHDocVw支持库
通过监听这些事件,开发者可以精确地控制和响应浏览器的行为。5. **安全性和兼容性**:由于SHDocVw与IE浏览器紧密关联,因此其安全性与IE的安全策略一致。
.net操作IE窗口
swc){ SHDocVw.InternetExplorer objIE = (SHDocVw.InternetExplorer)item; // 处理每个IE窗口}```通过`ShellWindowsClass
C#操作IE打开网页
```csharpusing SHDocVw;```接下来,我们将创建一个InternetExplorer类的实例,即一个IE浏览器对象,然后调用其`Navigate`方法来打开指定的URL。


