How to get IOleSite interface of the WebBrowser in

本文介绍了一种方法来获取WebBrowser ActiveX控件中的IOleSite接口。通过使用C#语言并调用COM接口和服务,可以实现从顶层浏览器获取IWebBrowser2接口的目的。此方法适用于需要与WebBrowser控件进行深入交互的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

How to get IOleSite interface of the WebBrowser in an ActiveX control
//From http://www.cnblogs.com/jonnyyu/archive/2004/02/14/1248.html
//based on Q172763 HOWTO: Retrieve the Top-Level IWebBrowser2 Interface from an ActiveX Control

using System;

using System.ComponentModel;

using System.Windows.Forms;

using System.Drawing;

using System.Reflection;

using System.Security;

using System.Runtime.InteropServices;

using SHDocVw;





//Use strongname to apply the customized pemission set

[assembly : AssemblyKeyFile(@"c:\key.snk")]

//Q814669 PRB: Strong Named User Controls Do Not render in Internet Explorer

[assembly: System.Security.AllowPartiallyTrustedCallers]

namespace Microsoft.Samples.WinForms.Cs.SimpleControl

{



public class SimpleControl : System.Windows.Forms.Control

{



public SimpleControl() :base()

{

Button btn = new Button();

btn.Parent = this;

btn.Text = "Button1";

btn.Location = new Point(10,10);

btn.Click += new EventHandler(Btn_OnClick);

Controls.Add(btn);

}

//from shlguid.h

Guid SID_STopLevelBrowser = new Guid(0x4C96BE40, 0x915C, 0x11CF, 0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37);

Guid SID_SWebBrowserApp = typeof(SHDocVw.IWebBrowserApp).GUID;

private void Btn_OnClick(object sender, EventArgs e)

{

try

{

Guid guidIServiceProvider = typeof(IServiceProvider).GUID;

Guid guidIWebBrowser2 = typeof(SHDocVw.IWebBrowser2).GUID;

object objIServiceProvider2;

object objIWebBrowser2;





Type typeIOleObject = this.GetType().GetInterface("IOleObject",true);

//call the method on that interface

object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",

BindingFlags.Instance|BindingFlags.InvokeMethod|BindingFlags.Public,

null,this,null);

IServiceProvider serviceProvider = oleClientSite as IServiceProvider;

serviceProvider.QueryService(ref SID_STopLevelBrowser,ref guidIServiceProvider, out objIServiceProvider2);

serviceProvider = objIServiceProvider2 as IServiceProvider;

serviceProvider.QueryService(ref SID_SWebBrowserApp, ref guidIWebBrowser2, out objIWebBrowser2);

IWebBrowser2 webBrowser = objIWebBrowser2 as IWebBrowser2;

MessageBox.Show(webBrowser.LocationURL);

}

catch(Exception ex)

{

System.Diagnostics.Debug.WriteLine(ex.ToString());

}



}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值