网页Web上调用本地应用程序(.exe)
一、web调用本地应用程序的思路
这个方法主要思路是利用自定义URL Protocol来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。这样就可以在WEB页面调到你的程序了。比如在浏览器地址栏输入“tencent://message/?uin=88888888&Site=JooIT.com&Menu=yes”就会出现一个QQ对话框。
1、先往注册表写信息。如下:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\Diff]
"URL Protocol"="这里是小程序的安装路径"
@="DiffProtocol"
[HKEY_CLASSES_ROOT\Diff\DefaultIcon]
@="这里是小程序的安装路径,1"
[HKEY_CLASSES_ROOT\Diff\shell]
[HKEY_CLASSES_ROOT\Diff\shell\open]
[HKEY_CLASSES_ROOT\Diff\shell\open\command]
@="\"这里是小程序的安装路径\" \"%1\""
将上面的内容保存为.reg文件运行即可。
2、web页面调用。在网页直接一个超链接,协议://参数就可以了。比如
<a href=" Diff://">alt="点击这里"> </a>
<a href=" Diff://hello">SIMU</a>
需要指出的是:在上面例子中注册表中代码【@="\"这里是小程序的安装路径\" \"%1\""】中的%1表示传入参数,就是对应这此处的Diff://hello,解析之后就可以得到参数hello了。
二、完整实例。
1、xxxClient.reg文件
Windows RegistryEditor Version 5.00[HKEY_CLASSES_ROOT\xxxClient]
@="xxxClientProtocol"
"URLProtocol"=""[HKEY_CLASSES_ROOT\xxxClient\DefaultIcon]
@="C:\\ xxx_Client\\client.bat,1"[HKEY_CLASSES_ROOT\xxxClient\shell][HKEY_CLASSES_ROOT\xxxClient\shell\open][HKEY_CLASSES_ROOT\xxxClient\shell\open\command]
@="\"C:\\xxx_Client\\client.bat\" \"%1\""
2、client.bat文件
@echo offrem设置当前目录为C:\ xxx _Client\
setcurrent_dir=C:\ xxx _Client\ pushd%current_dir% call C:\ xxx _Client\xxx _Client.exe
3、web页面文件
<!DOCTYPEHTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<htmlxmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type"content="text/html; charset=utf-8" /></head><body><div><a href="xxxClient://">打开客户端软件</a></div></body>
</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\xxx_Client.exe
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函数中进行参数解析
//解析传入的完整地址,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
网页Web上调用本地应用程序(.exe)相关推荐
- java web调用exe文件_从网页WEB上调用本地应用程序(java)
自己写了个java的桌面程序,想通过web页面调用直接打开登录页面,传账号和密码两个参数. 在网上看了很多资料,大多处理方法是自定义个协议然后通过协议来打开本地exe文件,但是这样传的参数怎么解析? ...
- [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法
这个方法主要思路是利用自定义URL Protocol来调用应用程序.浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数.对于我这个项 ...
- Web页面调用本地客户端程序并传参
好久没跟新博客了,今天跟新2019年的第一篇博客,最近在做项目,需求就是Web页面调用本地客户端程序并传参,传参是为了避免客户端再次输入账号密码,直接跳过登录. 翻了不少资料,总的来说好像都要操作注册 ...
- 【方法】HTML网页调用本地Python程序
欢迎支持个人chatgpt:https://chat.immuseai.com/register?promotion-code=pRE9p9DXCOBz3Z1s.注册即可使用GPT3.5和4.0. 代 ...
- 如何在网页中打开一个本地桌面程序
如何在网页中打开一个本地桌面程序 转载 2015年11月26日 20:30:14 1473 通过网页链接打开本地本地程序,想到最多的方法就是通过activex控件,但这里介绍一个通过注册新协议来打开本 ...
- JS中调用本地Winform程序并传递参数
场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...
- php文件 用户头像上传代码,网页web上传用户头像代码实现(美图秀秀开放)
网页web上传用户头像代码实现(美图秀秀开放) 在制作论坛或者一些门户社交网站的时候,经常要获取用户的头像.之前我们一般都是自己制作flash插件头像上传.或者用js来自己开发一个头像上传功能.比如有 ...
- 在web前端调用后台java程序(java类)的方式
在web前端调用后台java程序(java类)的方式: 首先静态html标签是无法直接调用java程序的,但是可以通过imput button按钮点击,onclick事件调用一个js函数,用这个js函 ...
- AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 wps office, excel ppt
AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office 更多主页 下载地址 能在以及几乎所有支持websock浏览器,包括chro ...
最新文章
- mongodb 安装部署说明
- linux cmake 交叉编译配置 简介
- 数据库防火墙——实现数据库的访问行为控制、危险操作阻断、可疑行为审计...
- tensorflow 之tensorboard 对比不同超参数训练结果
- python partition函数_如何使用正确的姿势进行高效Python函数式编程?
- _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
- Silverlight RIA Servcie 删除子对象实体提交错误的问题[解决]
- Linux 下的/usr/bin /usr/sbin /usr/local/bin /usr/local/sbin区别
- NCRE四级网络工程师考题详解----对等计算模型(P2P)
- C++ 通讯录设计(五)
- Nginx进程间通讯方式
- 121道分布式面试题和答案,25K妥妥的
- [MySQL]SQL优化工具SQLAdvisor
- Cygwin安装教程【超详细】
- jQuery双指放大缩小页面内容
- 【python批量插入图片到一个pdf中】
- ITSM软件与工单系统的区别是什么?
- 电赛硬件电路设计抗干扰措施
- Hibernate之HQL
- 故事:坐在我隔壁的小王问我什么是HyperLogLog