吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

原文:吉特仓库管理系统(开源)-如何在网页端启动WinForm 程序

 

  在逛淘宝或者使用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

 

时间: 2024-11-02 11:54:05

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

吉特仓库管理系统-- 后台管理开源啦,源码大放送

  吉特仓储管理系统已经开发好些年了,已经不记得有多少个版本的迭代, 就针对前端UI以及项目结构等重大修改也经历了好几次.吉特仓储管理系统这个名称其实也就今年才开始使用,在此之前都已客户公司命名,基本也是针对客户定制服务. 说到底对这个项目还是有感情的,因为这个项目和很多客户建立了关系,也认识了好多朋友,一起经历了很多曾经认为一辈子也不可能经历的事情,当然因为这个项目也给我个人带来了丰厚(相对个人来说)的金钱回报,最近想了想准备开源仓储系统后台管理的源码,供有需要的朋友和同学共同学习探讨.  

吉特仓库管理系统- 基本问题解答

  吉特仓储管理系统简单版开源也有一段时间了,得到了众多的开发者和软件开发企业的咨询和青睐,在此期间也经历了版权纠纷等问题,反而到现在好像也不是版权纠纷的问题了,软件著作权这个东西本身就很难以区分, 经过上次这么一闹之后卖源代码的网站反而越来越多了,实在是令人防不慎防,由于工作也就懒得去搭理这些东西了,就跟朋友说的我这是自找难受.由于个人工作时间的问题,有些技术方面的问题实在不好一一解答,今天写一篇博文总结一下各位所问道的问题.   一. 哪里修改数据连接 这个是所有开发者中问的最多的问题,基本

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

  上一篇文章说到了.NET中的打印机,在PrintDocument类也暴露一些本质上上的问题,前面也提到过了,虽然使用PrintDcoument打印很方便.对应条码打印机比如斑马等切刀指令,不依赖打印机驱动等等PrintDocuent显得无能为力.在开发吉特仓储管理系统(开源托管在github: https://github.com/hechenqingyuan/gitwms  有兴趣可以加本人QQ 821865130 或者Q群 88718955, 142050808 了解)的过程中遇到了各种

吉特仓库管理系统- 可恶行径我该怎么维权--- 已经协商解决问题,此文不再公开

  工作已经累了一天了,下班之后还在想着整理吉特仓储管理系统中所遇到的打印问题,这些天写了两篇关于吉特仓储管理系统打印相关的文章,都是自己开发实施过程中遇到的实际问题想和各位分享一下.吉特仓储管理系统是本人经过多年积累开发起来的,到目前有几十家企业客户在使用中.在前不久剥离了固化的业务部分,整理出来了一个开源版本托管在了github上:https://github.com/hechenqingyuan/gitwms 供大家学习和参考.   刚准备躺下睡觉,有网友在博客中留言说自己开源的吉特仓储管

吉特仓库管理系统截图展示

                        作者:情缘 出处:http://www.cnblogs.com/qingyuan/ 关于作者:从事仓库,生产软件方面的开发,在项目管理以及企业经营方面寻求发展之路 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接. 联系方式: 个人QQ  821865130 ; 仓储技术QQ群 88718955,142050808 ; 吉特仓储管理系统 开源地址: https://github.com

使用开源工具制作网页验证码的方法_javascript技巧

开发工具:eclipse.kaptcha-2.3.jar包. 一.创建Web项目: 二.新建一个Jsp页面(内容有,一个文本框,一个图片容器,一个提交按钮) <body> <img alt="random" src="randomcode.jpg" onclick="changeR(this)" style="cursor: pointer;"> <form action="check.

求VB.NET仓库管理系统的源码+数据库

问题描述 求VB.NET仓库管理系统的源码+数据库 解决方案 解决方案二: 解决方案三:引用1楼changjiangzhibin的回复: http://51aspx.com 汗死噢..偶要的是VB.NET的,(*^__^*)嘻嘻--解决方案四:希望有人能发一个来学习学习嘿嘿解决方案五:好象有!!!!解决方案六:能发给我一下吗?解决方案七:5555555555解决方案八:柳善居.

码云推荐 | WEB 网页端在线流程设计器

这是一个用来在WEB网页端设计流程图的UI组件,在线流程设计器,基于Jquery开发.可用来设计各种流程图.逻辑流图,数据流图,或者是设计某个系统中需要走流程的功能应用.良好的用户体验使得操作界面很容易上手,技术开发人员和用户都可使用. 并且兼容主流浏览器(ie8--ie edge,chrome,firefox). 本文来自开源中国社区 [http://www.oschina.net]

电脑网页端QQ空间视频如何关闭自动播放

  电脑网页端QQ空间视频如何关闭自动播放          首先用浏览器进入网页端qq空间,在空间首页顶端工具栏点击设置小齿轮 在左侧设置的菜单栏中选择应用设置 进入应用设置界面后选择视频设置后的编辑设置 好啦!此时我们选择[看到的视频不会自动播放]这一栏,最后提交,这样空间的视频就不会自动播放啦!