对于该篇文章有疑问或者错误的地方,邮件至 wzwahl36@qq,欢迎交流。
    在做web应用的时候,我们经常会遇到在web中调用本地应用程序的问题,例如在web中点击一个按钮,然后打开自己写的或者别人的应用程序。上网比较留意的同学应该会发现,想qq客服,淘宝的阿里旺旺客服都会有这样的效果。
    其中qq的聊天按钮已经开源,你也可以写到自己的网页中,详见wp.qq/index.html
 
    下面我主要介绍一种现在主流的处理方法,这种方法在网上的其他地方也有,但是都是转来转去,而且写得不详细,对于初学者来说,很难看懂,并仿照着处理。所以这篇文章不算原创,只能说是对网上的文章进行详细说明,便于大家使用和仿照。
    自己在做《电能计量仿真实训系统》中,需要在B/S系统中调用C/S仿真系统,并传入几个参数,尝试着用js调用activeObject来处理,但是这个涉及到安全性的问题,而且只能在ie下才能实现。
备注:这个项目是用Java完成的,包括c/s部分也是用java swing做的,所以我遇到的问题是在web上调用java打包之后jar应用程序,难度比web调用exe多了一步工作。
这个方法主要思路是利用自定义URL Protocolspringframework jar包导入来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。对于我这个项目而言,主要思路是利用这个自定义URL Protocol的方法,打开一个c#的应用程序,在这个程序中再调用系统命令,打开jar应用程序,并传入参数。主要实现步骤如下:
1.添加自定义URL Protocol
>>>>>>>>>>>>>>>>>
1.##Windows Registry Editor Version 5.00
2.##[HKEY_CLASSES_ROOT\Simu]
3.##"URL Protocol"="x:\\simu\\"
4.##@="SimuProtocol"
5.##[HKEY_CLASSES_ROOT\Simu\DefaultIcon]
6.##@="x:\\simu\\,1"
7.##[HKEY_CLASSES_ROOT\Simu\shell]
8.##[HKEY_CLASSES_ROOT\Simu\shell\open]
9.##[HKEY_CLASSES_ROOT\Simu\shell\open\command]
10.##@="\"x:\\simu\\\" \"%1\""
>>>>>>>>>>>>>>>>>
        #内的为自定义URL Protocol的注册表信息,我对每一行说明一下:第一行是注册表工具的版本信息,可以自己改一改,或者自己导入任意一个注册信息,把这一行复制过来就行了;第二行中的Simu就是在HKEY_CLASSES_ROOT下面添加一个Simu树,其中Simu
名称就对应着自定义URL Protocol的名称,在web中调用的时候需要这个名称;第三行中的"x:\\simu\\"是指定应用程序的路径,注意只能是exe的程序;第四行是协议的名称,可以是任意字符串,后面不会用到;第五行表示在Simu中再加一个分支,照抄,不用管;第六行中的x:\\simu\\也是对应的程序路径,后面的1照抄;第七行同第五行;第八行同第五行;第九行同第五行;第十行也是将路径换成自己的程序路径即可,其中%1表示到参数,参数可以在你的程序中解析得到。分析毕。
       #之间的内容复制到一个txt文档中,修改后缀名为.reg,双击该文件即可直接导入到注册表中。如下图:
2.编写C#程序()调用Jar应用程序
        程序就是上述注册表中指定的程序,即web上点击按钮之后,启动的程序。
    考虑到程序配置的简易和后期维护的方便,将jar程序的路径放到环境变量中,key对应为EMES_Simuvalue对应为simulink.jar程序的绝对路径。
    由此可得,对于的主要任务就是:
main(string[] args) {
        /**程序流程如下:
        *第一步:分析windows系统中的环境变量,得到环境变量为EMES_Simu的值(这个值是windows系统中Simulink.jar文件的绝对路径)。设为String pathValue
        *第二步:构造调用simulink.jar文件的系统命令。大致结构是:String cmdString=java -jar+ pathValue + args[0] + " " + args[1] + " "  args[2] + " "  args[3] + " "  args[4] + " "  args[5];
        *第三步:调用系统命令cmdString,执行Java应用程序,本程序主界面隐藏或者退出(只要不影响java应用程序的运行即可,并且java程序退出之后c#程序必须要退出)
        **/
}
       大家可能会思考这些功能用c语言即可完成,何必用c#gui程序,这是因为c语言的控制台程序运行系统命令之后,控制台的黑屏会一直保留,即使你想尽办法让它最小化,隐藏或者退出,在启动的时候也会有一个黑屏一闪而过,极不美观,使用c#gui程序,让程序的界面一直隐藏而不显示,就不会有这种一闪而过的感觉了。(当然你也可以用其他的语言或者其他方法处理了,这一点不限制)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论