当前位置: 首页 > news >正文

局域网网站开发/seo运营专员

局域网网站开发,seo运营专员,做网站产品图片素材,建设网站的网站公司综述 现在有很多B/S与C/S相结合的产品,会出现一种需求:从浏览器启动客户端的程序,并且如果客户端未安装相应程序,先提示安装。主流的几款产品:腾讯QQ、阿里旺旺、迅雷、PPLive等,都有实现了类似的功能。浏览…

  • 综述
    现在有很多B/S与C/S相结合的产品,会出现一种需求:从浏览器启动客户端的程序,并且如果客户端未安装相应程序,先提示安装。
    主流的几款产品:腾讯QQ、阿里旺旺、迅雷、PPLive等,都有实现了类似的功能。
    浏览器启动客户端程序可以通过注册自定义的Url协议来实现,而检测客户端是否安装程序需要利用ActiveX控件。
    要额外注意的是,现在只有IE浏览器才支持。
  • 客户端程序
    先准备一个简单的客户端程序,只用来显示传入的命令行参数。
    Client
    复制代码
    1 namespace wuhong.Client
    2 {
    3 class Program
    4 {
    5 static void Main(string[] args)
    6 {
    7 if (args != null && args.Length > 0)
    8 {
    9 Array.ForEach(args, arg => Console.WriteLine(arg));
    10 }
    11
    12 Console.ReadLine();
    13 }
    14 }
    15 }
    复制代码
  • 从浏览器启动
    注册自定义的Url协议,这样当用户点击这个URL协议的链接后,IE就会启动相关URL协议的处理器,使用注册的程序来处理这个协议。
    具体来说,比如现在需要注册“wuhong.client”的Url协议,使得形如“wuhong.client:XXXXYYYY”的链接都由上节的控制台程序来处理。
    这一切只需要在客户端安装控制台程序的同时向注册表添加下面的项就可以实现:
    注册表
    复制代码
    1 [HKEY_CLASSES_ROOT\wuhong.client]
    2
    3 @="wuhong.Client"
    4
    5  "URL Protocol"=""
    6
    7 [HKEY_CLASSES_ROOT\wuhong.client\DefaultIcon]
    8
    9 @=" wuhong.Client.exe "
    10
    11 [HKEY_CLASSES_ROOT\wuhong.client\Shell]
    12
    13 [HKEY_CLASSES_ROOT\wuhong.client\Shell\open]
    14
    15 [HKEY_CLASSES_ROOT\wuhong.client\Shell\open\command]
    16
    17 @="\"[TARGETDIR]wuhong.Client.exe\" \"%1\""
    复制代码
    解释一下其中几项:
    [HKEY_CLASSES_ROOT\wuhong.client]
    默认项和URL Protocol项的值都是设置一个名称。
    [HKEY_CLASSES_ROOT\wuhong.client\DefaultIcon]
    默认项的值是Url协议的图标文件名的路径。简单处理可以省略这一项。
    [HKEY_CLASSES_ROOT\wuhong.client\Shell\open\command]
    默认项的值是用来调用(或者启动)处理这个Url协议的程序。整个Url会作为一个参数传递给处理程序。
  • 检测客户端程序安装
    检测客户端是否安装了上节的控制台程序,需要另外实现一个ActiveX控件,在客户端安装程序的同时一并安装。这样可以利用ActiveX控件的加载情况,来判断控制台程序是否安装。
    作为示例,这里实现一个没有任何其他功能的ActiveX控件。
    首先定义IobjectSafety接口。IobjectSafety接口用来向IE声明自身是脚本安全的。在IE的中级安全级别上,是允许脚本安全的ActiveX控件的创建而不提示警告。
    IobjectSafety接口
    复制代码
    1 namespace wuhong.ActiveX
    2 {
    3 [ComImport, Guid("CB5BDC81-93C1-11CF-8F20-00805F2CD064")]
    4 [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    5 public interface IObjectSafety
    6 {
    7 [PreserveSig]
    8 int GetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] ref int pdwSupportedOptions, [MarshalAs(UnmanagedType.U4)] ref int pdwEnabledOptions);
    9
    10 [PreserveSig()]
    11 int SetInterfaceSafetyOptions(ref Guid riid, [MarshalAs(UnmanagedType.U4)] int dwOptionSetMask, [MarshalAs(UnmanagedType.U4)] int dwEnabledOptions);
    12 }
    13 }
    复制代码
      
    接下来是控件的代码,实现一个“wuhong.client”的控件,本身不添加任何额外的功能。
    UserControl类
    复制代码
    1 namespace wuhong.ActiveX
    2 {
    3 [Guid("9C9701D1-D188-495d-8721-9D246211A27C"), ProgId("wuhong.client"), ComVisible(true)]
    4 public partial class ActiveXObject : UserControl, IObjectSafety
    5 {
    6 public ActiveXObject()
    7 {
    8 InitializeComponent();
    9 }
    10
    11 private const int INTERFACESAFE_FOR_UNTRUSTED_CALLER = 0x00000001;
    12 private const int INTERFACESAFE_FOR_UNTRUSTED_DATA = 0x00000002;
    13 private const int S_OK = 0;
    14
    15 public int GetInterfaceSafetyOptions(ref Guid riid, ref int pdwSupportedOptions, ref int pdwEnabledOptions)
    16 {
    17 pdwSupportedOptions = INTERFACESAFE_FOR_UNTRUSTED_CALLER;
    18 pdwEnabledOptions = INTERFACESAFE_FOR_UNTRUSTED_DATA;
    19
    20 return S_OK;
    21 }
    22
    23 public int SetInterfaceSafetyOptions(ref Guid riid, int dwOptionSetMask, int dwEnabledOptions)
    24 {
    25 return S_OK;
    26 }
    27 }
    28 }
    复制代码
    另外AssemblyInfo.cs中需要修改并添加以下内容:
    AssemblyInfo.cs
    1 using System.Security;
    2 [assembly: AllowPartiallyTrustedCallers()]
    3 [assembly: ComVisible(true)]
    项目生成中也需要选择“为COM互操作注册”。
  • 测试
    将客户端程序、ActiveX控件以及注册Url协议的注册表项制作成安装包。
    使用下面的页面代码测试:
    Test页面
    复制代码
    1 <html xmlns="http://www.w3.org/1999/xhtml" >
    2  <head>
    3 <script type='text/javascript'>
    4 function Start() {
    5 try {//支持
    6   var obj = new ActiveXObject("wuhong.client");
    7 }
    8 catch (e) {//不支持
    9   }
    10 if(null != obj){
    11 delete obj;
    12 window.navigate('wuhong.client:start?HelloWorld');
    13 }
    14 else{
    15 alert("您未安装程序,请安装!");
    16 }
    17 }
    18 </script>
    19 <title></title>
    20  </head>
    21  <body>
    22 <input type="button" onclick="Start()" value="启动"/>
    23  </body>
    24  </html>
    复制代码
    可以看到安装前后点击“启动”按钮的区别。
    安装前:
    安装后:

转载于:https://www.cnblogs.com/marryZhan/archive/2012/07/30/2797287.html

http://www.lbrq.cn/news/795277.html

相关文章:

  • 重庆孝爱之家网站建设/江苏seo网络
  • 网站怎么吸引用户/主流网站关键词排名
  • dw下载中文版破解/百度搜索排名优化哪家好
  • 一般做自己的网站需要什么/地推推广方案
  • 蛋糕网站设计/东莞seo外包公司
  • 做网站需要学什么/网站seo快速优化
  • 购物网站产品做促销能赚钱吗/如何注册百度账号
  • 网站做https/培训心得体会范文
  • 免费做图片链接网站/引擎搜索是什么意思
  • 中文域名抢注的骗局/台州seo快速排名
  • 应用商城软件下载 app/seo快速排名利器
  • 珠海做网站公司/网站排名怎么优化
  • 全国建设部网站证书查询/网站项目开发流程
  • 佛山网站建设报价/什么是搜索关键词
  • 做的比较好的卡车网站/云优化seo
  • wordpress 输出缩略图/seo服务指什么意思
  • 站长做2个网站/百度网址大全设为主页
  • 乌鲁木齐建设工程信息网站/电商数据统计网站
  • b站怎么看视频在线人数/百度推广竞价
  • 有风格的网站/com网站域名注册
  • xp怎么做网站服务器/域名注册管理机构
  • 建设应用型网站的意义/seo百度站长工具
  • 网站地址解析/网站优化排名推广
  • 南充做网站电话/app广告投放价格表
  • 烟台网站推广排名/新冠咳嗽一般要咳多少天
  • 昆明做网站做的好的公司/惠州优化怎么做seo
  • 如何做免费网站推广/2022年百度seo
  • 网站建设和运维单位责任/seo工具大全
  • 河南做网站公司哪家专业/怎样在百度上宣传自己的产品
  • 做基础网站主机要?/建立一个网站需要花多少钱
  • PyTorch 张量核心操作——比较、排序与数据校验
  • [硬件电路-120]:模拟电路 - 信号处理电路 - 在信息系统众多不同的场景,“高速”的含义是不尽相同的。
  • 【MySQL索引失效场景】索引失效原因及最左前缀原则详解
  • 电商前端Nginx访问日志收集分析实战
  • 标准项目-----网页五子棋(4)-----游戏大厅+匹配+房间代码
  • SpringMVC核心原理与实战指南