网页Web上调用本地应用程序(.exe)
一、web调用本地应用程序的思路
这个方法主要思路是利用自定义URL Protocol来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。这样就可以在WEB页面调到你的程序了。比如在浏览器地址栏输入“tencent://message/?uin=88888888&Site=JooIT&Menu=yes”就会出现一个QQ对话框。
1、先往注册表写信息。如下:
[plain] view plain copy
print?
1.Windows Registry Editor Version 5.00
2.[HKEY_CLASSES_ROOT\Diff]
3."URL Protocol"="这里是小程序的安装路径"
4.@="DiffProtocol"
5.[HKEY_CLASSES_ROOT\Diff\DefaultIcon]
6.@="这里是小程序的安装路径,1"
7.[HKEY_CLASSES_ROOT\Diff\shell]
8.[HKEY_CLASSES_ROOT\Diff\shell\open]
9.[HKEY_CLASSES_ROOT\Diff\shell\open\command]
10.@="\"这里是小程序的安装路径\" \"%1\""
将上面的内容保存为.reg文件运行即可。
2、web页面调用。在网页直接一个超链接,协议://参数就可以了。比如
[html] view plain copy
print?
1.<a href=" Diff://">
2.alt="点击这里">
3.</a>
[html] view plain copy
print?
1.<a href=" Diff://hello">SIMU</a>
需要指出的是:在上面例子中注册表中代码【@="\"这里是小程序的安装路径\" \"%1\""】中的%1表示传入参数,就是对应这此处的Diff://hello,解析之后就可以得到参数hello了。
二、完整实例。
1、文件
[plain] view plain copy
print?
1.Windows RegistryEditor Version 5.00
2.
3.[HKEY_CLASSES_ROOT xxClient]
4.@="xxxClientProtocol"
5."URLProtocol"=""
6.
7.[HKEY_CLASSES_ROOT xxClient\DefaultIcon]
8.@="C:\\ xxx_Client\\client.bat,1"
9.
10.[HKEY_CLASSES_ROOT xxClient\shell]
11.
12.[HKEY_CLASSES_ROOT xxClient\shell\open]
13.
14.[HKEY_CLASSES_ROOT xxClient\shell\open\command]
15.@="\"C:\ xx_Client\\client.bat\" \"%1\""
2、client.bat文件
[plain] view plain copy
print?
1.@echo off
2.
3.rem设置当前目录为C:\ xxx _Client\
4.setcurrent_dir=C:\ xxx _Client\
5.
6.pushd%current_dir%
7.
8.call C:\ xxx _Client xx _
3、web页面文件
[html] view plain copy
print?
1.<!DOCTYPEHTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-
transitional.dtd">
2.<htmlxmlnshtmlxmlns="/1999/xhtml">
3.<head>
4.<meta http-equiv="Content-Type"content="text/html; charset=utf-8" />
5.</head>
6.<body>
7.<div>
8.<a href="xxxClient://">
9.打开客户端软件
10.</a>
11.</div>
12.</body>
13.</html>
三、注意问题:
1、如何动态生成注册表信息,可以在应用程序中写代码操作注册表,写入上面的URL Protocol注册表格式信息。
2、路径问题,如果应用程序包含了很多文件,就涉及到工作路径问题,web调用应用程序,当时的工作路径是的web运行的工作路径。可以通过bat或应用程序来切换路径。
以bat为例,建立一个批处理文件,里面切换路径,注册注册表信息时,[HKEY_CLASSES_ROOT\Diff\shell\open\command]使用bat路径。
xxxClient.bat文件
@echo off
rem设置当前目录为C: xxx_Client\
setcurrent_dir=C:\ xxx_Client\
pushd%current_dir%
call C:\ xxx_Client
3、如何获取参数?
MFC Dialog程序的参数值:
首先需要获取传入的参数,在控制台程序中我们都知道main()函数的参数argv里带入了传入的参数,而在MFC程序中则需要在InitInstance()中进行命令行参数解析。
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
为了给对话框传入待显示的参数,加入了一个SetDisplayInfo方法。
CHelloWorldDlg dlg;
dlg.SetDisplayInfo(cmdInfo.m_strFileName);//设置待显示的信息
void CHelloWorldDlg::SetDisplayInfo(CString& strInfo)
{
this->m_strInfo = strInfo;
}
最后在OnInitDialog函数中进行参数解析
小程序图文editor//解析传入的完整地址,e.g "helloworld://hello world/"
int pos = m_strInfo.Find("//");//到分隔符
m_strInfo = m_strInfo.Mid(pos+2);//取到传入的参数
m_strInfo.Delete(m_strInfo.GetLength()-1);//去掉最后的'/'
m_edit_info.SetWindowText(m_strInfo);
代码实例
参考资料:
1, Registering an Application to a URL Protocol
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论