网页Web上调用本地应用程序

来源:互联网 发布:数据分析平台 编辑:程序博客网 时间:2024/04/19 03:37

 一、web调用本地应用程序的思路

        这个方法主要思路是利用自定义URL Protocol来调用应用程序。浏览器在解析到自定义URL Protocol之后,会寻找注册表,然后通过注册表启动相应的程序,然后启动改程序,传入参数。就好像是在浏览器可以打开迅雷类似。


        1、先往注册表写信息。如下:

[plain] view plain copy
  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文件运行即可。

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

[html] view plain copy
  1. <a href=" Diff://">  
  2.    alt="点击这里">    
  3.  </a>  

 

[html] view plain copy
  1. <a href=" Diff://hello">SIMU</a>  

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

 

二、完整实例。

1xxxClient.reg文件

 

[plain] view plain copy
  1. Windows RegistryEditor Version 5.00  
  2.    
  3. [HKEY_CLASSES_ROOT\xxxClient]  
  4. @="xxxClientProtocol"  
  5. "URLProtocol"=""  
  6.    
  7. [HKEY_CLASSES_ROOT\xxxClient\DefaultIcon]  
  8. @="C:\\ xxx_Client\\client.bat,1"  
  9.    
  10. [HKEY_CLASSES_ROOT\xxxClient\shell]  
  11.    
  12. [HKEY_CLASSES_ROOT\xxxClient\shell\open]  
  13.    
  14. [HKEY_CLASSES_ROOT\xxxClient\shell\open\command]  
  15. @="\"C:\\xxx_Client\\client.bat\" \"%1\""  

2client.bat文件

[plain] view plain copy
  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\xxx _Client.exe  


3web页面文件

[html] view plain copy
  1. <!DOCTYPEHTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <htmlxmlnshtmlxmlns="http://www.w3.org/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\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);


本人经过尝试,将所有需要的文件整理如下,可供下载

资源下载 http://download.csdn.net/download/qiuchunhuige/10112809

原创粉丝点击