一、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)相关推荐

  1. java web调用exe文件_从网页WEB上调用本地应用程序(java)

    自己写了个java的桌面程序,想通过web页面调用直接打开登录页面,传账号和密码两个参数. 在网上看了很多资料,大多处理方法是自定义个协议然后通过协议来打开本地exe文件,但是这样传的参数怎么解析? ...

  2. [转]从网页Web上调用本地应用程序(.jar、.exe)的主流处理方法

    这个方法主要思路是利用自定义URL Protocol来调用应用程序.浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数.对于我这个项 ...

  3. Web页面调用本地客户端程序并传参

    好久没跟新博客了,今天跟新2019年的第一篇博客,最近在做项目,需求就是Web页面调用本地客户端程序并传参,传参是为了避免客户端再次输入账号密码,直接跳过登录. 翻了不少资料,总的来说好像都要操作注册 ...

  4. 【方法】HTML网页调用本地Python程序

    欢迎支持个人chatgpt:https://chat.immuseai.com/register?promotion-code=pRE9p9DXCOBz3Z1s.注册即可使用GPT3.5和4.0. 代 ...

  5. 如何在网页中打开一个本地桌面程序

    如何在网页中打开一个本地桌面程序 转载 2015年11月26日 20:30:14 1473 通过网页链接打开本地本地程序,想到最多的方法就是通过activex控件,但这里介绍一个通过注册新协议来打开本 ...

  6. JS中调用本地Winform程序并传递参数

    场景 JS中调用本地exe程序: JS中调用本地exe程序_BADAO_LIUMANG_QIZHI的博客-CSDN博客 在上面的基础上怎样在js中调用本地winform程序并且传递参数. 注: 博客: ...

  7. php文件 用户头像上传代码,网页web上传用户头像代码实现(美图秀秀开放)

    网页web上传用户头像代码实现(美图秀秀开放) 在制作论坛或者一些门户社交网站的时候,经常要获取用户的头像.之前我们一般都是自己制作flash插件头像上传.或者用js来自己开发一个头像上传功能.比如有 ...

  8. 在web前端调用后台java程序(java类)的方式

    在web前端调用后台java程序(java类)的方式: 首先静态html标签是无法直接调用java程序的,但是可以通过imput button按钮点击,onclick事件调用一个js函数,用这个js函 ...

  9. AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 wps office, excel ppt

    AppEmit v0.9.5 新功能 浏览器调用本地应用程序 支持打开 编辑 金山 office   更多主页   下载地址   ​​​​​​​ 能在以及几乎所有支持websock浏览器,包括chro ...

最新文章

  1. mongodb 安装部署说明
  2. linux cmake 交叉编译配置 简介
  3. 数据库防火墙——实现数据库的访问行为控制、危险操作阻断、可疑行为审计...
  4. tensorflow 之tensorboard 对比不同超参数训练结果
  5. python partition函数_如何使用正确的姿势进行高效Python函数式编程?
  6. _cdecl、_stdcall 、_fastcall、_thiscall 函数调用方式与区别
  7. Silverlight RIA Servcie 删除子对象实体提交错误的问题[解决]
  8. Linux 下的/usr/bin /usr/sbin /usr/local/bin /usr/local/sbin区别
  9. NCRE四级网络工程师考题详解----对等计算模型(P2P)
  10. C++ 通讯录设计(五)
  11. Nginx进程间通讯方式
  12. 121道分布式面试题和答案,25K妥妥的
  13. [MySQL]SQL优化工具SQLAdvisor
  14. Cygwin安装教程【超详细】
  15. jQuery双指放大缩小页面内容
  16. 【python批量插入图片到一个pdf中】
  17. ITSM软件与工单系统的区别是什么?
  18. 电赛硬件电路设计抗干扰措施
  19. Hibernate之HQL
  20. 故事:坐在我隔壁的小王问我什么是HyperLogLog

热门文章

  1. 蓝桥ROS机器人之绚丽贪吃蛇
  2. CodeForces 707B Bakery
  3. 解决KMPlayer播放f4v格式文件并关联
  4. SC3小型裂缝监测预警仪地质灾害群测群防公共场所安全预警
  5. 对数坐标系与半对数坐标系
  6. SVG大神专访:计育韬,开创行业更要守护行业。
  7. 错误:“java:找不到符号“
  8. 电平转换电路的处理办法
  9. 个人简历计算机水平如何填写,简历如何写计算机水平
  10. Escape Rout