如何在網頁中呼叫windows本地執行程式 How to run windows application (.exe) in HTML

有時候我們希望在網頁上開啟本地端的應用程式,但是受限於安全性的關係,通常流覽器都不允許執些開啟本地『執行程式』

在 IE 底下,其實可以透過 ActiveXObject 內建物件建立起 wscript.shell 介面,利用此介面來呼叫本地端程式(其實不一定是程式,已註冊文件類型都可以透過 wscript shell 來開啟。

常見方法如下:


<html>

<head>
<script language="javascript">
function Run(strPath)
{
var objShell = new ActiveXObject("wscript.shell");
objShell.exec(strPath);
objShell = null;
}
</script>
</head>

<body>
<h1>Call target file : D:\Apps\procexp.exe</h1>
<BUTTON class=button onclick="Run('D:\Apps\procexp.exe')">執行 Procexp</BUTTON>
</body>

</html>


上面就是利用 wscript.shell 呼叫指定程序 procexp.exe

問題是...

它是 IE Only

而且,受限於IE版本的關係,比較新版的 IE 必須要去作安全設定才能整常使用,相當不實用。

那,是否有其他方式呼叫本地應用程式呢?

有的,那就是使用自定義的協定讓瀏覽器接受,例如:eD2k:// VeryCD://等等



如上圖如果利用自訂義的協定就可以讓瀏覽器向註冊表請求自定義協定的動作

因此,必須自己創建協定(不可以和目前使用的協定名稱相同)

例如我要自定義一個協定名稱叫 ZzTest:// ,接下來作法如下

一、開啟註冊登錄表

      使用命令列模式(使用者必須有系統管理權限) 輸入 Regedit ,然後 Enter

二、建立自定義協定

      在 \HKEY_CLASS_ROOT\ 下建立一個機碼,這個機碼名稱 將來就是作為『協定』的名稱。我在這裡使用了 ZzTest 。

      然後在 ZzTest 下繼續建立 DefaultIcon 和 shell 機碼
      在 shell 下建立 open 機碼
      在 open 底下建立 command 機碼


      然後,繼續在 ZzTest 下修改(預設值) 內容 = zztest protocol (這只是協定名稱,隨便取無所謂)

      接下來繼續新增一個字串值 = URL Protocol (內容保持空白),要注意這個字串值名稱不可以亂取,因為它是 Windows 的識別關鍵字,用來告訴系統,這裡有個自定義的 URL 協定,協定名稱就是 ZzTest (機碼名)

三、建立協定動作

      有了協定名稱,接下來要定義呼叫協定後的動作。

      首先在 DefaultIcon 內的預設值修改成 程式&路徑,假如我要呼叫的程式是 D:\Apps\procexp.exe,那就輸入(記得要加雙引號)
"D:\Apps\procexp.exe"
      如果有參數輸入就增加參數
"D:\Apps\procexp.exe" "%1"


      繼續在 \ZzTest\shell\open\command 下修改預設值為
"D:\Apps\procexp.exe"
      如果有參數輸入就增加參數
"D:\Apps\procexp.exe" "%1"



      完成上述動作後,此協定就可以被瀏覽器呼叫了


四、HTML內的呼叫方法

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>Call Local executable file</title>
<style>
.myButton {
box-shadow: 3px 4px 0px 0px #1564ad;
background:linear-gradient(to bottom, #79bbff 5%, #378de5 100%);
background-color:#79bbff;
border-radius:5px;
border:1px solid #337bc4;
display:inline-block;
cursor:pointer;
color:#ffffff;
font-family:Arial;
font-size:17px;
font-weight:bold;
padding:12px 44px;
text-decoration:none;
text-shadow:0px 1px 0px #528ecc;
}
.myButton:hover {
background:linear-gradient(to bottom, #378de5 5%, #79bbff 100%);
background-color:#378de5;
}
.myButton:active {
position:relative;
top:1px;
}
</style>
</head>

<body>
<h1>Call target file : D:\Apps\procexp.exe</h1>
<a href="Zztest://"><div class="myButton">Press here to test</div></a>
<body>
</html>

說實在,重點只有一行
<a href="Zztest://" />

五、呼叫結果

IE:
FF:
Chrome:






















留言

這個網誌中的熱門文章

【研究】列印的條碼為什麼很難刷(掃描)

C# 使用 Process.Start 執行外部程式

統一發票列印小程式