How to get IOleSite interface of the WebBrowser in an ActiveX control

None.gif // based on Q172763 HOWTO: Retrieve the Top-Level IWebBrowser2 Interface from an ActiveX Control
None.gif

None.gif
using  System;
None.gif
None.gif
using  System.ComponentModel;
None.gif
None.gif
using  System.Windows.Forms;
None.gif
None.gif
using  System.Drawing;
None.gif
None.gif
using  System.Reflection;
None.gif
None.gif
using  System.Security;
None.gif
None.gif
using  System.Runtime.InteropServices;
None.gif
None.gif
using  SHDocVw;
None.gif
None.gif 
None.gif
None.gif 
None.gif
None.gif
// Use strongname to apply the customized pemission set
None.gif

None.gif[assembly : AssemblyKeyFile(
@" c:\key.snk " )]
None.gif
None.gif
// Q814669 PRB: Strong Named User Controls Do Not render in Internet Explorer
None.gif

None.gif[assembly: System.Security.AllowPartiallyTrustedCallers]
None.gif
None.gif
namespace  Microsoft.Samples.WinForms.Cs.SimpleControl 
None.gif
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif     
public class SimpleControl : System.Windows.Forms.Control 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif         
public SimpleControl() :base() 
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif              Button btn 
= new Button();
InBlock.gif
InBlock.gif              btn.Parent 
= this;
InBlock.gif
InBlock.gif              btn.Text 
= "Button1";
InBlock.gif
InBlock.gif              btn.Location 
= new Point(10,10);
InBlock.gif
InBlock.gif              btn.Click 
+= new EventHandler(Btn_OnClick);
InBlock.gif
InBlock.gif              Controls.Add(btn);
InBlock.gif
ExpandedSubBlockEnd.gif         }

InBlock.gif
InBlock.gif        
//from shlguid.h
InBlock.gif

InBlock.gif         Guid SID_STopLevelBrowser 
= new Guid(0x4C96BE400x915C0x11CF0x990xD30x000xAA0x000x4A0xE80x37);
InBlock.gif
InBlock.gif         Guid SID_SWebBrowserApp 
= typeof(SHDocVw.IWebBrowserApp).GUID;
InBlock.gif
InBlock.gif         
private void Btn_OnClick(object sender, EventArgs e)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif         
dot.gif{
InBlock.gif
InBlock.gif              
try
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif              
dot.gif{
InBlock.gif
InBlock.gif                   Guid guidIServiceProvider 
= typeof(IServiceProvider).GUID;
InBlock.gif
InBlock.gif                   Guid guidIWebBrowser2 
= typeof(SHDocVw.IWebBrowser2).GUID;
InBlock.gif
InBlock.gif                   
object objIServiceProvider2;
InBlock.gif
InBlock.gif                   
object objIWebBrowser2;
InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif              
InBlock.gif
InBlock.gif                   Type typeIOleObject 
= this.GetType().GetInterface("IOleObject",true);
InBlock.gif
InBlock.gif                
//call the method on that interface
InBlock.gif

InBlock.gif                   
object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",
InBlock.gif
InBlock.gif                       BindingFlags.Instance
|BindingFlags.InvokeMethod|BindingFlags.Public,
InBlock.gif
InBlock.gif                       
null,this,null);
InBlock.gif
InBlock.gif                   IServiceProvider serviceProvider 
= oleClientSite as IServiceProvider;
InBlock.gif
InBlock.gif                   serviceProvider.QueryService(
ref SID_STopLevelBrowser,ref guidIServiceProvider, out objIServiceProvider2);
InBlock.gif
InBlock.gif                   serviceProvider 
= objIServiceProvider2 as IServiceProvider;
InBlock.gif
InBlock.gif                   serviceProvider.QueryService(
ref SID_SWebBrowserApp, ref guidIWebBrowser2, out objIWebBrowser2);
InBlock.gif
InBlock.gif                   IWebBrowser2 webBrowser 
= objIWebBrowser2 as IWebBrowser2;
InBlock.gif
InBlock.gif                   MessageBox.Show(webBrowser.LocationURL);
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif              
catch(Exception ex)
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif              
dot.gif{
InBlock.gif
InBlock.gif                   System.Diagnostics.Debug.WriteLine(ex.ToString());
InBlock.gif
ExpandedSubBlockEnd.gif              }

InBlock.gif
InBlock.gif 
InBlock.gif
ExpandedSubBlockEnd.gif         }

InBlock.gif
ExpandedSubBlockEnd.gif     }

InBlock.gif
InBlock.gif 
InBlock.gif
InBlock.gif     [
InBlock.gif
InBlock.gif         ComImport,Guid(
"6d5140c1-7436-11ce-8034-00aa006009fa"),
InBlock.gif
InBlock.gif         InterfaceType(ComInterfaceType.InterfaceIsIUnknown)
InBlock.gif
InBlock.gif     ]
InBlock.gif
InBlock.gif     
public interface IServiceProvider
InBlock.gif
ExpandedSubBlockStart.gifContractedSubBlock.gif     
dot.gif{
InBlock.gif
InBlock.gif         
void QueryService( ref Guid guidService,  ref Guid riid, [MarshalAs(UnmanagedType.Interface)] out object ppvObject); 
InBlock.gif
ExpandedSubBlockEnd.gif     }

InBlock.gif
ExpandedBlockEnd.gif}

None.gif
None.gif 
None.gif
None.gif 
None.gif
None.gif 
None.gif

转载于:https://www.cnblogs.com/jonnyyu/archive/2004/02/14/1248.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值