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

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 、 1资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READmE.文件(md如有),本项目仅用作交流学习参考,请切勿用于商业用途。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值