2013年1月24日 星期四

WSH 的使用者溝通

我用 WSH 這麼久了, 事實上只用到 WScript.Echo() 這個使用者溝通方法, 而且只是在測試抓蟲的時候才用上 (輸出內部變數之狀態), 程式寫完了就去除啦. 因為 WSH 通常被用來做一些自動化的工作, 執行所需的環境變數或預設值早已定好, 或者程式會自動決定, 不需要使用者輸入, 因此類似瀏覽器 Javascript 的 window.confirm() 與 window.prompt() 功能都沒用到. 注意喔, alert/confirm/prompt 只能用在網頁中, 不能用在 WSH 中. 雖然同樣是使用 Javascript, 但環境 (宿主) 不同, 那麼所提供的方法或物件也不同. 例如在網頁中是用 window.alert(), 但在 ASP 裡就要用 Response.Write().
今天心血來潮, 突然想到, 在 WSH 中要如何做到 window.prompt() 與 window.confirm() 呢? 查了一下 WSH 的書, 發現 WSH 沒有提供像 Echo 那樣的方法, 難道是很少用到的關係嗎? 後來在這個網頁 : "WSH 编程中的 alert/confirm/prompt" 找到解法.
prompt() 要用 Popup 來做 :
function confirm(msg) {
   var shell = new ActiveXObject("WScript.Shell");
   return shell.Popup(msg, 0, "確認是窗", 33) == 1;
   }
而 prompt 則要借用 VBscript 的 InputBox 來做 :
function prompt(msg) {
   var scriptCtrl = new ActiveXObject("ScriptControl");
   msg = escape(msg + "");
   scriptCtrl.Language = "VBScript";
   var vbsCode = 'InputBox(Unescape("' + msg + '"), "輸入視窗")';
   return scriptCtrl.Eval(vbsCode);
}

沒有留言 :