网页启动客户端程序代码

上传人:m**** 文档编号:508497614 上传时间:2023-05-21 格式:DOCX 页数:6 大小:15.83KB
返回 下载 相关 举报
网页启动客户端程序代码_第1页
第1页 / 共6页
网页启动客户端程序代码_第2页
第2页 / 共6页
网页启动客户端程序代码_第3页
第3页 / 共6页
网页启动客户端程序代码_第4页
第4页 / 共6页
网页启动客户端程序代码_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《网页启动客户端程序代码》由会员分享,可在线阅读,更多相关《网页启动客户端程序代码(6页珍藏版)》请在金锄头文库上搜索。

1、文档供参考,可复制、编制,期待您的好评与关注! 网页启动客户端程序代码(2009-12-07 12:45:36) 转载标签: it分类: WEB学习 摘自:http:/ Run() var o = new ActiveXObject(WScript.Shell);o.exec(D:Program FilesUlead SystemsUlead VideoStudio 9.0vstudio.exe);其实我们只需要通过注册协议方式就可以成功实现。在客户端安装时我们只需要写如下注册表信息:HKEY_CLASSES_ROOTtest=testProtocolURL Protocol=C:Progra

2、m Filestest.Setuptest.exeHKEY_CLASSES_ROOTUstcoriDefaultIcon=C:Program Filestest.Setuptest.exe,1HKEY_CLASSES_ROOTtestshellHKEY_CLASSES_ROOTtestshellopenHKEY_CLASSES_ROOTtestshellopencommand=C:Program Filestest.SetupDriver.exe这样就注册了一个新协议test,之后直接通过在浏览器中输入test: ,就会自动从注册表中查找该协议程序的地址,打开客户端程序。3、然后就要实现客户端

3、未安装时,提示消息了。这个颇费周折,网上没有找到相关的方式,大多的实现方式也是通过js调用WScript.Shell控件。后来找到了网上有很多QQ的实现方式:function IsInstallQQ() try/支持 var xmlhttp=new ActiveXObject(TimwpDll.TimwpCheck); return true; catch(e)/不支持 location.href=http:/ /window.open(http:/ scrollbars=yes,resizable=no,copyhistory=no,width=410, height=410,top=0,l

4、eft=0) return false; return false; 对于红色那段activex的调用是怎么回事却没有说明,搜索一下发现msn,迅雷等其实是通过类似的方式实现的,制作一个自定义控件后,并对它进行安全授权,连同客户端程序一起安装,该自定义控件会往注册表中写值,然后通过js实例化该控件,如果异常说明客户端程序未安装。看一下QQ如何写值的:HKEY_CLASSES_ROOTTimwpDll.TimwpCheck=TimwpDll.TimwpCheckHKEY_CLASSES_ROOTTimwpDll.TimwpCheckCLSID=ED4CA2E5-0EEA-44C1-AD7E-74

5、A07A7507A4认准的实现方向,那么下面就展开对于自定义activex控件的调查。4、利用VS2008制作自定义activex控件 a、首先在解决方案下建一个Windows控件库项目(windows from control library),然后增加一个控件UstcOriWebLab.cs。 b、打开AssemblyInfo.cs修改程序集信息。引用System.Security命名空间,并添加 assembly:AllowPartiallyTrustedCallers()安全声明,修改assembly: ComVisible(false)为assembly: ComVisible(tr

6、ue)使程序集Com可见。c、为Com Interop注册。右键demoActiveX项目属性,在“生成”选项卡里将“为Com Interop注册”打上勾即可。 d、选择菜单工具创建 Guid工具生成一个新的GuidE5FD041B-8250-4cbc-B662-A73FC7988FB5,copy下来,加在类头上Guid(F325140B-90E3-42d7-8F27-F1E68E1BD92E), ProgId(UstcOriWebLabActivex.UstcOriWebLab), ComVisible(true)F325140B-90E3-42d7-8F27-F1E68E1BD92E就是写

7、入注册表的CLSID,UstcOriWebLabActivex.UstcOriWebLab为键名。 e、实现IObjectSafety接口,把ActiveX控件标记为安全的。ActiveX危险,那么为什么QQ以及MediaPlayer等都是用ActiveX的方式创建的,却没有问题?原来,这是因为这些ActiveX组件都声明自己是脚本安全的,而IE的中级安全设置上,是允许脚本安全的ActiveX创建,并且不予警告的。IE怎么知道一个插件是脚本安全的?它是通过以下两个办法。一是查询ActiveX组件是否实现了IObjectSafety接口,并且返回脚本安全;二是查询ActiveX组件是否在注册表的

8、Component Category Manager里表明自己实现了CATID_SafeForInitializing和CATID_SafeForScripting。(参考http:/ System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;namespace UstcOriWebLabActivex ComImport, GuidAttribute(CB5BDC81-93C1-11CF-8F20-00805F2CD064) InterfaceTypeAttri

9、bute(ComInterfaceType.InterfaceIsIUnknown) public interface IObjectSafety PreserveSig int GetInterfaceSafetyOptions(ref Guid riid, MarshalAs(UnmanagedType.U4) ref int pdwSupportedOptions, MarshalAs(UnmanagedType.U4) ref int pdwEnabledOptions); PreserveSig() int SetInterfaceSafetyOptions(ref Guid rii

10、d, MarshalAs(UnmanagedType.U4) int dwOptionSetMask, MarshalAs(UnmanagedType.U4) int dwEnabledOptions); 在UstcOriWebLab.cs中实现接口using System;using System.Collections.Generic;using System.ComponentModel;using System.Drawing;using System.Data;using System.Linq;using System.Text;using System.Windows.Forms

11、;using System.Runtime.InteropServices;namespace UstcOriWebLabActivex Guid(F325140B-90E3-42d7-8F27-F1E68E1BD92E), ProgId(UstcOriWebLabActivex.UstcOriWebLab), ComVisible(true) public partial class UstcOriWebLab : UserControl, IObjectSafety public UstcOriWebLab() InitializeComponent(); private const st

12、ring _IID_IDispatch = 00020400-0000-0000-C000-000000000046; private const string _IID_IDispatchEx = a6ef9860-c720-11d0-9337-00a0c90dcaa9; private const string _IID_IPersistStorage = 0000010A-0000-0000-C000-000000000046; private const string _IID_IPersistStream = 00000109-0000-0000-C000-000000000046; private const string _IID_IPersistPropertyBag = 37D84F60-42CB-11CE-8135-00AA004BB851; private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001; private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002; private const int S_OK

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 国内外标准规范

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号