在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天。之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的问题,因为使用网页端的打印效果并不是太好,之前也写过关于打印相关的文章可以查阅,我需要使用WinForm客户端来驱动打印,但是我又不想重新开发Winform客户端的所有功能,只要能够使用winform驱动打印即可。我就需要一个类似阿里旺旺一样的功能,点击网页上的按钮启动WinForm程序,并且传递一定的参数。

  一. 注册协议

    在网上查阅相关资料,要在网页中启动相关的Winform程序,可以使用注册表自定义协议来完成,一下是完成的步骤:

    (1) 在命令行(cmd)输入regedit 可以打开注册表的预览窗体

    (2) 自定义协议的名称为gitwms,名字可以随意,尽量取的有意义

    (3) 在注册表 HKEY_CLASSES_ROOT 下添加项项: 右键选择该节点,新建-项-在树节点中输入协议名称 gitwms

    (4) 选中gitwms节点,在右侧列表框中双击默认项,在数值数据输入框中输入 “URL:自定义协议” , 网上说可以随意些,没有测试,输入此值测试成功

    (4) 然后在列表中右键 新建 字符串值, 在名称栏输入 "URL Protocol", 然后双击该项在数据这一栏输入 "URL Protocol"  , 数据栏数据随意

    (5) 在gitwms 节点下新建项: "shell"

    (6) 在"shell" 项下新建项:"open"

    (7) 在"open"项下新建项:"command"

    (8) 选中command项,右侧列表中双击默认这一行,在数据数值这一项中输入 "D:\Print.exe" "%1"  , 注意这里的 引号是要的,前面是程序的绝对路径,后面暂且固定吧【还未完全弄懂】

  二. 网页测试

    在记事本中编辑 <a href="gitwms:441">点击这里启动程序</a>  内容, 然后另存为网页格式,使用浏览器打开。

    

    点击网页上的连接,会出现如上对话框。和启动阿里旺旺的比较类似了,应该说离成功不远了。点击按钮启动应用 就可以启动客户端程序了

    

    注册表添加之后的结构如上图

  三. 难道每次都手工添加注册表

    上面注册表的操作都是使用手工处理的,这样在安装程序的时候多麻烦, 要是能够实现使用程序注册注册表,那就省事多了。 这个在很多程序中都有这样的功能,使用.NET也可以很方便的操作注册表。 注册表分为几个节点,注册表开头分支,也叫根分支,分别是:HKEY_CLASSES_ROOT、HKEY_CURRENT_USER、HKEY_LOCAL_MACHINE、HKEY_USERS、HKEY_CURRENT_CONFIG。

    (1)使用RegistryKey的OpenSubKey()方法打开注册表

    (2)使用RegistryKey的CreateSubKey()方法新建注册表

    (3)使用RegistryKey的DeleteSubKey()方法删除注册表

    (4)使用SetValue()方法设置/创建注册表键值

    在使用的时候需要先检查注册表是否存在,如果存在删除原有的注册情况,然后新增注册信息。

            try
{
Console.WriteLine("正在查找已经注册的程序.....");
RegistryKey key = Registry.ClassesRoot;
key.DeleteSubKeyTree(@"gitwms");
Console.WriteLine("已经清除注册程序.....");
}
catch (Exception e)
{
Console.WriteLine("未找到注册的程序...");
} /*===============================================*/
Console.WriteLine("开始注册程序....");
RegistryKey regWrite = Registry.ClassesRoot.CreateSubKey("gitwms");
regWrite.SetValue("", "URL:自定义协议");
regWrite.SetValue("URL Protocol", "URL Protocol");
regWrite.Close(); regWrite = Registry.ClassesRoot.CreateSubKey(@"gitwms\shell");
regWrite.Close(); regWrite = Registry.ClassesRoot.CreateSubKey(@"gitwms\shell\open");
regWrite.Close(); regWrite = Registry.ClassesRoot.OpenSubKey(@"gitwms\shell\open", true);
RegistryKey aimdir = regWrite.CreateSubKey("command"); string BaseDirectory=AppDomain.CurrentDomain.BaseDirectory;
string AppPath = Path.Combine(BaseDirectory, "OWorld.Cloud.Resource.Download.exe"); aimdir.SetValue(@"", "\""+AppPath+"\" \" %1\""); regWrite.Close();
aimdir.Close();

    使用以上代码可以轻松的实现注册的写入, 并且完全满足刚才自定义协议的规则。 这里我们将注册的程序做成一个register.exe 程序, 放到要启动的客户端程序根目录下, 在使用前使用管理员身份运行注册程序,便于获取启动程序的根路径写入到注册表。

这里有一个地方是值得注意的,新建注册表之后就会出现一项 (默认) 的键值数据, 刚开始无论怎样都不能往这个项中写入数据, 是自己没有弄明白的,这里是一个坑。  在使用SetValue() 赋值的时候,需要将Key 设置为 "", 不然不能往(默认)这一项中写入值。

  四. 如何传递参数

    启动了客户端程序这远远还不够,如何能够将网页上的参数传递到客户端程序中。

static void Main(string[] args)

    关键点就在这里, 主程序进入之后,使用参数数组 args 接收外来参数。

<a href="gitwms:441">点击这里启动程序</a>

    点击这个连接会将参数 gitwms:441 全部传入到args中,  gitwms:****  后可以跟任意的参数, 包括JSON字符串。 这样就方便多了,获取参数之后就可以做相应的操作

  以上程序操作是为了启动客户端的打印而做的,这里不一定做的很好,但是也不失为一种办法。

作者:情缘

出处:http://www.cnblogs.com/qingyuan/

关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。

联系方式: 个人QQ  821865130 ; 仓储技术QQ群 88718955,142050808 ;

吉特仓储管理系统 开源地址: https://github.com/hechenqingyuan/gitwms

吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序的更多相关文章

  1. 如何在网页端启动WinForm 程序

    在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓储管理系统的时候也遇到一个类似的 ...

  2. 网页端启动WinForm

    网页端启动WinForm 程序 在逛淘宝或者使用QQ相关的产品的时候,比如淘宝我要联系店家点击旺旺图标的时候能够自动启动阿里旺旺进行聊天.之前很奇怪为什么网页端能够自动启动客户端程序,最近在开发吉特仓 ...

  3. 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇

    上一篇文章说到了.NET中的打印机,在PrintDocument类也暴露一些本质上上的问题,前面也提到过了,虽然使用PrintDcoument打印很方便.对应条码打印机比如斑马等切刀指令,不依赖打印机 ...

  4. 吉特仓储管理系统-ERP或WMS系统中常见术语

    MPS---主生产计划(Master Production schedules) MTO---订货生产(Make-to-Order) BOM---物料清单或产品结构表(Bill of material ...

  5. QT 仓库管理系统 开放源代码

    IT 要走多久,要怎么走. IT 要走多久,要怎么走.这些问题,在我已经快毕业了一个年头的如今,又又一次浮如今我的脑海里.一边是工作的了了模块,一边是能够自己无聊打发的时间.这不是我当初要的路,如今的 ...

  6. SSH综合练习-仓库管理系统-第二天

    SSH综合练习-仓库管理系统-第二天 今天的主要内容: 货物入库 页面信息自动补全回显功能:(学习目标:练习Ajax交互) 根据货物简记码来自动查询回显已有货物(Ajax回显) 根据货物名来自动查询补 ...

  7. PDA无线数据采集器在仓库管理系统中的应用

    条码数据采集器在仓库管理系统中的应用,条码数据采集器,顾名思义就是通过扫描货物条码,对货物进行数量分类采集,方便仓库正规化管理.条码数据采集器是现代化条码仓库管理系统中不可缺少的一部分,能提升企业的整 ...

  8. Ajenti 1.0 发布,服务器管理系统 - 开源中国社区

    Ajenti 1.0 发布,服务器管理系统 - 开源中国社区 Ajenti 1.0 发布,服务器管理系统

  9. GitHub网页端和客户端操作

    参见GitHub上的repository中的moreLove.tata.tata2 moreLove 在网页版GitHub上创建的空项目然后填充的tata 在windows客户端创建的空项目然后填充的 ...

随机推荐

  1. PHP

    * PHP语言1.基本内容 * PHP语言 - 类似于javascript语言的 * javascript是客户端(HTML)的脚本语言 * PHP是服务器端的脚本语言 * PHP文件的扩展名为&qu ...

  2. jquery编写插件的方法

     版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2 ...

  3. Android Fragment使用(三) Activity, Fragment, WebView的状态保存和恢复

    Android中的状态保存和恢复 Android中的状态保存和恢复, 包括Activity和Fragment以及其中View的状态处理. Activity的状态除了其中的View和Fragment的状 ...

  4. android FrameLayout详解

    首先看演示: FrameLayout框架布局是最简单的布局形式.所有添加到这个布局中的视图都以层叠的方式显示.第一个添加的控件被放在最底层,最后一个添加到框架布局中的视图显示在最顶层,上一层的控件会覆 ...

  5. Android进度条学习

    自定义属性 <!-- roundColor 圆环的颜色 roundProgressColor 进度的颜色 roundWidth 圆环的宽度 textColor 文字颜色 textSize 文字大 ...

  6. OC NSFileHandle(文件内容操作)

    OC NSFileHandle(文件内容操作) 初始化 [NSFileHandle fileHandleForUpdatingAtPath:@"data.txt"]; //file ...

  7. MVC学习系列5--Layout布局页和RenderSection的使用

    我们开发网站项目的时候,都会遇到这样的问题:就是页面怎么统一风格,有一致的外观,在之前ASP.NET的时代,我们有两种选择,一个是使用MasterPage页,一个是手动,自己在每个页面写CSS样式,但 ...

  8. Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)

    使用Microsoft SQL SERVER 2014 Management Studio访问Azure SQL Database时,查看存储过程时遇到下面错误信息: TITLE: Microsoft ...

  9. ora-01033和ora-12560错误的解决方案

    1.登录pl sql 报01033的错误,如下图: 2.登录cmd中,报12560的错误,如下图: 3.查看服务和注册表都没有问题,如下: 查看服务,已启动,如下图: 运行regedit,进入HKEY ...

  10. C语言猜拳游戏

    2016年最后一篇文章 今天闲来无事Google了一段C语言写的猜拳游戏的代码(本人水平比较低,几乎是刚入门),我没做什么修改.这个switch语句里面对result的处理让我眼前一新,原来是这么玩的 ...