自定义协议从浏览器中启动本地应用程序

1. 需要启动的本地应用程序为:

e:\SRC\Test\MyApp\bin\Debug\MyApp.exe

2. 编辑注册表导入文件: MyApp_Disk_D.reg

内容如下:

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. Windows Registry Editor Version 5.00
  2. [HKEY_CLASSES_ROOT\myapp]
  3. @="URL:AutoHotKey myapp Protocol"
  4. "URL Protocol"=""
  5. [HKEY_CLASSES_ROOT\myapp\DefaultIcon]
  6. @="myapp.exe,1"
  7. [HKEY_CLASSES_ROOT\myapp\shell]
  8. [HKEY_CLASSES_ROOT\myapp\shell\open]
  9. [HKEY_CLASSES_ROOT\myapp\shell\open\command]
  10. @="\"e:\\SRC\\Test\\myapp\\bin\\Debug\\myapp.exe\" \"%1\""

 

3. 将上面的文件导入到注册表.

4. 在IE中输入如下内容,即可启动应用程序myapp.exe

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. myapp://parameter

 

5. 至此在大多数浏览器中,已经能够通过自定义的协议启动指定应用程序了.

6. 对于Chrome浏览器,若不能启动指定的应用,请查看如下几点

6.1 自定义协议后的参数不能太短,最好超过三个字符,并且最好不要用一些常用的关键字.

6.2 配置Chrome的阻止的协议列表, 配置文件路径如下,不用的安装路径,还不用的用户,路径稍有不同:

C:\Users\liu\AppData\Local\Google\Chrome\User Data\Local State

打开此文件后,找到如下内容:

[plain] view plain copy 在CODE上查看代码片派生到我的代码片
  1. "protocol_handler":
  2. {
  3.     "excluded_schemes":
  4.     {
  5.         "afp":true,
  6.         "data":true,
  7.         "disk":true,
  8.         "disks":true,
  9.         "file":true,
  10.         "hcp":true,
  11.         "iview":false,
  12.         "javascript":true,
  13.         "mailto":false,
  14.         "ms-help":true,
  15.         "ms-windows-store":false,
  16.         "myapp":false,
  17.         "news":false,
  18.         "nntp":true,
  19.         "shell":true,
  20.         "snews":false,
  21.         "tencent":false,
  22.         "vbscript":true,
  23.         "view-source":true,

确保我们自己定义的协议 myapp 后面的值为"false", 即不在被排除的列表中.

7. 通过网页中的连接打开本地相关应用程序的示例如下

  1. <!DOCTYPE html>
  2. <html>
  3.  <head>
  4.     <title>Web Automation</title>
  5.     <script type="text/javascript">
  6.         function dicom() {
  7.             var ret = confirm('Start Dicom Search?');
  8.             var aetitle = document.getElementById("txtAETitle").value;
  9.             var patientid = document.getElementById("txtPatientId").value;
  10.             var accessnumber = document.getElementById("txtAccessionNumber").value;
  11.             var local = document.getElementById("cbLocal").checked;
  12.             if (ret == true) {
  13.                 window.location = 'myapp://,query,' + aetitle + ',' + patientid + ',' + accessnumber + ',' + local;
  14.             }
  15.             return;
  16.         };
  17.         function study() {
  18.             var ret = confirm('Open Study?');
  19.             var aetitle = document.getElementById("txtAETitle").value;
  20.             var studyInstanceUId = document.getElementById("txtStudyInstanceUId").value;
  21.             if (ret == true) {
  22.                 window.location = 'myapp://,study,' + aetitle + ',' + studyInstanceUId;
  23.             }
  24.             return;
  25.         };
  26.         function LaunchApp() {
  27.             try {
  28.                 var ret = confirm('Start myapp?');
  29.                 if (ret == true) {
  30.                     window.location = 'myapp://,start';
  31.                 }
  32.             }
  33.             catch (ex) {
  34.                 errMsg = "启动 myapp 报错.\n\n";
  35.                 alert(errMsg);
  36.             }
  37.             return;
  38.         };
  39.     </script>
  40.      <style type="text/css">
  41.          #txtAccessionNumber
  42.          {
  43.              width: 191px;
  44.          }
  45.          #txtStudyInstanceUId
  46.          {
  47.              width: 901px;
  48.          }
  49.      </style>
  50. </head>
  51. <body>
  52.     <div>
  53.        <input type="button" value="Open IView" onclick = "LaunchApp()" /><br /><br />
  54.         <label>AE Title: <input id="txtAETitle" type="text" value="AETITLE" /></label>
  55.         <label>PatientID: <input id="txtPatientId" type="text" value="115042300003"/></label>
  56.         <label>AccessionNumber: <input id="txtAccessionNumber" type="text" /></label>
  57.         <label>Search Local:<input id="cbLocal" type="checkbox" value="local" /></label><br />
  58.         <label>StudyInstanceUId: <input id="txtStudyInstanceUId" type="text" value="1.2.392.200036.9125.2.138612190166.20150423000027"/></label><br /><br />
  59.         <input type="button" value="Dicom Search" onclick = "dicom()" /><br /><br />
  60.         <input type="button" value="Open study" onclick = "study()" />
  61.     </div>
  62. </body>
  63. </html>

http://blog.csdn.net/jingliangliu/article/details/52648256

  1. da shang
    donate-alipay
               donate-weixin weixinpay

发表评论↓↓