博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
网页Web上调用本地应用程序( exe)
阅读量:3948 次
发布时间:2019-05-24

本文共 2437 字,大约阅读时间需要 8 分钟。

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

               


        一、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文件运行即可。

2web页面调用。在网页直接一个超链接,协议://参数就可以了。比如

   alt="点击这里">   

 

SIMU

    需要指出的是:在上面例子中注册表中代码【@="\"这里是小程序的安装路径\" \"%1\""】中的%1表示传入参数,就是对应这此处的Diff://hello,解析之后就可以得到参数hello了。

 

二、完整实例。

1xxxClient.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\""

2client.bat文件

@echo off rem设置当前目录为C:\ xxx _Client\setcurrent_dir=C:\ xxx _Client\  pushd%current_dir%  call C:\ xxx _Client\xxx _Client.exe

3web页面文件

     
          
   

三、注意问题:

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 

 

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!

转载地址:http://bqwzi.baihongyu.com/

你可能感兴趣的文章
Java(百度地图API)使用坐标的经纬度得到具体的城市信息
查看>>
解决org.springframework.web.multipart.MaxUploadSizeExceededException报错问题
查看>>
memset()函数的使用详解
查看>>
微信小程序——Java后台获取access_token
查看>>
微信小程序——Java后台使用服务端的接口获取小程序二维码报错{"errcode":41030,"errmsg":"invalid page hint: [r0ragA07724245]"}
查看>>
微信小程序——Java后台使用服务端的接口获取小程序二维码报错{"errcode":40169,"errmsg":"invalid length......
查看>>
微信小程序——服务端获取小程序二维码 永久有效 数量无限制
查看>>
报错java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method ....
查看>>
解决:SpringBoot项目访问任意接口都跳转到login登录页面
查看>>
[SSL]——如何使用SpringBoot内置的tomcat配置SSL——>从而实现HTTPS访问(基于阿里云云服务器)
查看>>
使用Xshell重置Linux服务器中mysql数据库的密码
查看>>
SpringBoot + SpringSecurity解决POST DELETE方式下的被拒绝访问 报错403的问题 (关闭CSRF)
查看>>
微信小程序——解决微信小程序B接口生成小程序码中scene参数的存放和获取问题
查看>>
Springboot2中内置tomcat解决请求头过长异常 java.lang.IllegalArgumentException: Request header is too large
查看>>
Javase->Javaee->Javaweb联系与区别
查看>>
c语言中关于int *p = &a 的解读
查看>>
解决Springboot2中无法访问在static/image/中的静态图片!终于解决啦
查看>>
IDEA搭建Springboot+SpringMVC+Mybatis+Mysql(详细、易懂)
查看>>
牛客网华为机试——合并表记录
查看>>
算数基本定理
查看>>