2013年9月23日 星期一

從用戶端本機網頁觸發執行 WSH 的方法

這次 AutoIt 自動化執行程式在 win7 不知何故 (相容性?) 無法執行, 無暇研究此問題, 只好另闢蹊徑, 改用 HTML 網頁當 GUI 介面, 利用網頁中的按鈕來執行 WSH 自動執行程式. 作法以自動連上批踢踢實業坊為例, 簡要說明如下. 首先撰寫一個 Javascript 為基礎的 WSH 自動執行程式 run.js :

Telnet 到 ptt.cc 的 WSH

var shell=WScript.CreateObject("Wscript.Shell");
var result=shell.Run("telnet.exe",1);
WScript.Sleep(1000);
shell.SendKeys("open ptt.cc{Enter}");

然後寫一個網頁 index.htm 如下 :

觸發 WSH 的網頁介面

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">  
  <title></title>
</head>
<body>
  <input type="button" value="前往批踢踢" onclick="executeJS('run.js')">
  <script>
    function executeJS(file) {
         var shell=new ActiveXObject("WScript.Shell");
        var folder=get_folder(); //傳回雙左斜線格式
        folder=folder.replace(/\\\\/g,"\\"); //改為單左斜線
        shell.CurrentDirectory=folder; //設定為目前目錄
         shell.Run(file); //執行 WHS 程式
        shell=null;
         }
    function get_folder() { 
        //傳回網頁在本機中的真實路徑,例如 D:\\project\\robot\\
        var browser=window.navigator.appName;
        var b_version=window.navigator.appVersion;
        var version=b_version.split(";"); 
        var trim_Version=version[1].replace(/[ ]/g,""); 
        var sys_path=unescape(window.location.pathname);
        var pos=sys_path.lastIndexOf("\/"); 
        var path=sys_path.substring(1,pos+1); 
        var path_arr=path.split("\/"); 
        var folder=path_arr.join("\\\\");
        return folder;
        }
  </script>
</body>
</html>   

把這兩個檔案都存在磁碟中, 然後以 IE 開啟 index.htm 檔 (注意, 必須用 IE, 因為這裡用到 ActiveX 技術), 就會看到一個 "前往批踢踢" 的按鈕, 按下它就會執行 run.js, 而此 WSH 程式的作用是打開命令提示字元, 執行 telnet.exe 程式, 連線到批踢踢. 若是在 WIN7 以上系統, 要注意 telnet 服務預設沒有打開, 請參照 "Windows 7 使用 Telnet 連上 PTT" 這篇說明先打開 telnet. 還有若連上 ptt 後顯示亂碼, 那就是命令提示字元視窗的預設編碼問題, 請改為 950 (Big5) 即可.


沒有留言 :