c#Activex控件中调用JavaScript

来源:互联网 发布:网络歌手伤感歌曲大全 编辑:程序博客网 时间:2024/05/23 11:27

1.引用Microsoft.mshtml 

Microsoft.mshtml的路径是C:/Program Files/Microsoft.NET/Primary Interop Assemblies/Microsoft.mshtml.dll,添加引用后在ActiveX对应类中编写:

[csharp] view plaincopy
  1. <strong>using</strong> mshtml;  


2.用c#实现两个COM类,IOleClientSite和IOleContainer


[csharp] view plaincopy
  1. <strong><textarea cols="50" rows="15" name="code" class="c-sharp">using System.Runtime.InteropServices;  
  2. [ComImport,  
  3.  Guid("00000118-0000-0000-C000-000000000046"),  
  4.  InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]  
  5. public interface IOleClientSite  
  6. {  
  7.     void SaveObject();  
  8.     void GetMoniker(uint dwAssign, uint dwWhichMoniker, object ppmk);  
  9.     void GetContainer(out IOleContainer ppContainer);  
  10.     void ShowObject();  
  11.     void OnShowWindow(bool fShow);  
  12.     void RequestNewObjectLayout();  
  13. }  
  14.   
  15. [ComImport,  
  16.  Guid("0000011B-0000-0000-C000-000000000046"),  
  17.  InterfaceTypeAttribute(ComInterfaceType.InterfaceIsIUnknown)]  
  18. public interface IOleContainer  
  19. {  
  20.     void EnumObjects([In, MarshalAs(UnmanagedType.U4)] int grfFlags,  
  21.         [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppenum);  
  22.     void ParseDisplayName([In, MarshalAs(UnmanagedType.Interface)] object pbc,  
  23.         [MarshalAs(UnmanagedType.BStr)] string pszDisplayName,  
  24.         [Out, MarshalAs(UnmanagedType.LPArray)] int[] pchEaten,  
  25.         [Out, MarshalAs(UnmanagedType.LPArray)] object[] ppmkOut);  
  26.     void LockContainer([In, MarshalAs(UnmanagedType.I4)] int fLock);  
  27. }</textarea> </strong>  


3.调用JavaScript方法 

在Activex控件的对应类中就可以编写如下的CallJavaScript方法: 

[csharp] view plaincopy
  1. <strong><textarea cols="50" rows="15" name="code" class="c-sharp">private void CallJavaScript(string Filenames)  
  2. {  
  3.     Type typeIOleObject = this.GetType().GetInterface("IOleObject"true);  
  4.     object oleClientSite = typeIOleObject.InvokeMember("GetClientSite",  
  5.      BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,  
  6.     null,  
  7.     this,  
  8.     null);  
  9.   
  10.     IOleClientSite oleClientSite2 = oleClientSite as IOleClientSite;  
  11.     IOleContainer pObj;  
  12.     oleClientSite2.GetContainer(out pObj);  
  13.   
  14.     //参数数组  
  15.   
  16.     object[] args = new object[1];  
  17.     args[0] = Filenames;  
  18.   
  19.     //获取页面的Script集合  
  20.   
  21.     IHTMLDocument pDoc2 = (IHTMLDocument) pObj;  
  22.     object script = pDoc2.Script;  
  23.   
  24.     try  
  25.     {  
  26.         //调用JavaScript方法OnScaned并传递参数,因为此方法可能并没有在页面中实现,所以要进行异常处理  
  27.   
  28.         script.GetType().InvokeMember("OnScaned",  
  29.         BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.Public,  
  30.        null,  
  31.         script,  
  32.         args);  
  33.     }  
  34.     catch { }  
  35. }</textarea> </strong>  


4.在页面中实现相应的JavaScript方法 

在包含这个ActiveX控件的页面中添加如下的JavaScript方法:


[html] view plaincopy
  1. <strong><textarea cols="50" rows="15" name="code" class="javascript"><mce:script type="text/javascript"><!--  
  2. function OnScaned(files)  
  3. {  
  4.     if (files)  
  5.     {  
  6.         //do something  
  7.     }  
  8. }  
  9. // --></mce:script></textarea> </strong>  


这样,在ActiveX控件中调用CallJavaScript方法时,最终就会调用到页面中的OnScaned方法,藉此实现了ActiveX的“事件”机制。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 苏宁金融秒拒怎么办 微盘账号忘记了怎么办 天府e税忘记密码怎么办 未成年在外面没地方住怎么办? 半框眼镜片掉了怎么办 选修差0.5个学分怎么办 脱产考博社保卡怎么办 幼儿上课不认真听讲怎么办 手机恢复的音频文件打不开怎么办 高考志愿填报不记得密码怎么办 经济纠纷案被告没有证据怎么办 管家婆管理员密码忘记了怎么办 人离职了公司扣发工资怎么办? 美国给我们断网怎么办 sci发表后发现错误怎么办 pos机按键是英文怎么办 蔚县县医院慢病本怎么办 知网下载的论文乱码怎么办 被期刊网骗了怎么办? 缝针缝到神经上怎么办 单位有个事特别多的领导怎么办 网上申请公司核名核不下来怎么办 老公把小三晒朋友圈老婆该怎么办 小三怀孕不愿意打掉怎么办 小三怀孕了引产怎么办 小三发现小四小三发现小四后怎么办 七十岁老人肺癌还有小三样怎么办 留学出国学历公认证怎么办 学历认证报告弄丢了怎么办 想读大专没考上怎么办 学信网身份证被注册了怎么办 学信网手机号换了密保忘了怎么办 学信网手机号改了密保忘了怎么办 学信网手机号忘了密保也忘了怎么办 学信网账号被注销了怎么办 原味奶酪太难吃怎么办 cma年费太贵了怎么办 会计证3年没年检怎么办 幼师面试没有什么特长怎么办 电子学历注册表过期了怎么办 学信网查不到电子注册登记表怎么办