第 24 章 wsh 範例精選

60
第 24 第 WSH 第第第第 第第第 [email protected] http://mirlab.org/jang 第第第第第 MIR 第第第

Upload: efuru

Post on 22-Jan-2016

104 views

Category:

Documents


0 download

DESCRIPTION

第 24 章 WSH 範例精選. 張智星 [email protected] http://mirlab.org/jang 台大資工系 MIR 實驗室. 本章大綱. 大綱 本章提供了各種常用 WSH 的程式範例,讓讀者能夠一覽 WSH 的典型應用。 主題 24-1 :桌面處理 24-2 :檔案處理 24-3 :目錄與磁碟機處理 24-4 :電腦系統管理 24-5 :網頁伺服器的管理 24-6 :通用表示法的應用 24-7 :網頁抓取與處理 24-8 :與資料庫整合 24-9 :使用 wsInetTools.dll - PowerPoint PPT Presentation

TRANSCRIPT

第 24 章 WSH 範例精選

張智星[email protected]

http://mirlab.org/jang台大資工系 MIR實驗室

JavaScript 程式設計與應用:用於單機的 WSH 環境

本章大綱 大綱

本章提供了各種常用 WSH 的程式範例,讓讀者能夠一覽 WSH 的典型應用。

主題 24-1 :桌面處理 24-2 :檔案處理 24-3 :目錄與磁碟機處理 24-4 :電腦系統管理 24-5 :網頁伺服器的管理 24-6 :通用表示法的應用 24-7 :網頁抓取與處理 24-8 :與資料庫整合 24-9 :使用 wsInetTools.dll 24-10 :傳送鍵盤事件

2 /29

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-1 :桌面處理

本小節將說明如何使用 WSH 來對電腦桌面進行簡單的管理。

3/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-1 主題:在桌面建立記事本的捷徑

連結:執行結果 檢視原始碼 程式碼

說明 執行上述程式後,你會在你的電腦桌面發現一個新捷徑,名稱為「 WSH 產生的記事本捷徑」。

WSHShell = WScript.CreateObject("WScript.Shell"); // 產生 WSH Shell DesktopPath = WSHShell.SpecialFolders("Desktop"); // 使用SpecialFolders 讀取桌面路徑 Shortcut1 = WSHShell.CreateShortcut(DesktopPath + "\\WSH 產生的記事本捷徑 .lnk"); // 於桌面上建立捷徑物件 (shortcut object) Shortcut1.TargetPath = "c:\\windows\\notepad.exe";Shortcut1.Save();

4/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-2 主題:將一段由 WSH 產生的文字送到剪貼簿

連結:執行結果 檢視原始碼 程式碼

說明 執行上述範例後,開啟記事本並按 Ctrl-v ,極可將剪貼簿中的文字貼到記事本。

How to set IE visible? Can you create a simpler example?

strCopy = " 這是被送至剪貼簿的文字 " objIE = WScript.CreateObject("InternetExplorer.Application"); objIE.visible = false;objIE.Navigate("about:blank"); objIE.document.parentWindow.clipboardData.setData("text", strCopy); objIE.Quit();

5/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-3 主題:對桌面視窗進行直接的串接

連結:執行結果 檢視原始碼 程式碼

說明 執行後,即可重疊顯示螢幕上的視窗 當桌面上太多視窗時,可用此方法整理

objShell = new ActiveXObject("Shell.Application"); objShell.CascadeWindows();

6/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-4 主題:對桌面視窗進行水平並排

連結:執行結果 檢視原始碼 程式碼

說明 此方法可以水平並排螢幕上的視窗

objShell = new ActiveXObject("Shell.Application");objShell.TileHorizontally();

7/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-5 主題:對桌面視窗進行垂直並排

連結:執行結果 檢視原始碼 程式碼

說明 執行後,即可垂直並排螢幕上的視窗

objShell = new ActiveXObject("Shell.Application");objShell.TileVertically();

8/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-2 :檔案處理

本小節將以範例說明 WSH 對於檔案的讀寫

9/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-6 主題:將 file1.txt 及 file2.txt 的內容寫到 file3.txt

連結:執行結果 檢視原始碼 程式碼重點

說明 file1.txt的檔案內容為”這是 file1.txt 的內容。”

file2.txt的檔案內容為”這是 file2.txt 的內容。”執行後的 file3.txt內容為”這是 file1.txt 的內容。這是 file2.txt 的內容。”

WScript.Echo(" 讀取第一個檔案: " + file1); c1=f1.ReadAll(); WScript.Echo(" 讀取第二個檔案: " + file2); c2=f2.ReadAll(); WScript.Echo(" 寫到第三個檔案: " + file3); f3.Write(c1); f3.Write(c2);

10/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-7 (1/2) 主題:若常讀取檔案,可以函數 fileRead() ,將讀取 的檔案內容送到陣列,便於進行逐列的處理。 連結:執行結果 檢視原始碼

說明: 第一段的程式碼是將檔案內容傳送至陣列 第二段的程式碼則是函數的定義 執行 fileRead01.js 後,將在 DOS 命令視窗印出此檔案的內容並加入列數,詳細內容見下頁

11/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-7 (2/2)列出 fileRead01.js 的內容並加上列數: 1.// 將檔案內容傳送至陣列 2.WScript.Echo(" 列出 "+WScript.ScriptName+" 的內容並加上列數: "); 3. WScript.Echo(""); 4. outputArray=fileRead(WScript.ScriptName); 5. for (i=0; i<outputArray.length; i++)6. WScript.Echo((i+1)+". " + outputArray[i]); 7. 8. // 函數定義9. function fileRead(File){ 10. var fso=new ActiveXObject("Scripting.FileSystemObject"); 11. var fid=fso.OpenTextFile(File); 12. var contents=fid.ReadAll(); 13. fid.Close(); 14. var output=contents.split("\n"); 15. return(output); 16. }

12/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-8 主題:使用 WSH 來讀取與檔案相關的性質

連結:執行結果 檢視原始碼 程式碼重點

說明 要抓出所有性質,我們可以從 for-in 迴圈著手。 Can someone give me a working example?

for (i=0; i<prop.length; i++) WScript.Echo("fileObj." + prop[i] + " = " + eval("fileObj."+prop[i]));

13/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-3 :目錄與磁碟機處理

本小節將以範例說明 WSH 對於目錄與磁碟機處理

14/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-9 主題:顯示某一個資料夾的大小

連結:執行結果 檢視原始碼 程式碼

說明: 執行上述程式後,典型顯示結果如下:目錄的大小是

15365403102 bytes. 若 folderPath 設定成 C 槽,會有權限問題,如何解決?

fso = new ActiveXObject("Scripting.FileSystemObject"); folderPath = “F:\\competition\\KDD"; objFolder = fso.GetFolder(folderPath); WScript.Echo(folderPath + " 目錄的大小是 " + objFolder.Size + " bytes.");

15/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-10 主題:使用 WSH 顯示目前工作目錄,或是改變目前工作目錄 連結:執行結果 檢視原始碼 程式碼

說明: 典型顯示結果如下:

目前工作目錄: D:\users\jang\books\wsh\example 改變目前工作目錄至: c:\windows\temp

Not working! Help needed…

WshShell=new ActiveXObject("WScript.Shell"); WScript.Echo(" 目前工作目錄: "+WshShell.CurrentDirectory); WshShell.CurrentDirectory = "c:\\windows\\temp"; WScript.Echo(" 改變目前工作目錄至: "+WshShell.CurrentDirectory);

16/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-11 主題:列出一特定目錄下的所有檔案

連結:執行結果 檢視原始碼 程式碼

說明: 執行後即可列出 c:\windows\temp 目錄下的所有檔案

fso = new ActiveXObject("Scripting.FileSystemObject");folderPath="c:\\windows\\temp";fsoFolder = fso.GetFolder(folderPath);fileList = new Enumerator(fsoFolder.Files);WScript.Echo("Files under \""+folderPath+"\":");for (fileList.moveFirst(); !fileList.atEnd(); fileList.moveNext())

WScript.Echo(fileList.item());

17/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-12 主題:列出磁碟機及其相關性質

連結:執行結果 檢視原始碼 說明:典型顯示結果如下

C: x.DriveType = 2 ( 硬碟 ) x.ShareName = x.IsReady = true x.VolumeName = x.AvailableSpace = 24901296128

Bytes D:

x.DriveType = 2 ( 硬碟 ) x.ShareName =

... 18/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-4 :電腦系統管理

本小節將以範例說明 WSH 對於電腦系統的管理

19/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-13 主題:列出與 SYSTEM 相關的重要環境變數 連結:執行結果 檢視原始碼

說明:重要的環境變數: windir = %SystemRoot% path = %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;c:\matlab6p 5\bin\win32;C:\Program Files\Microsoft SQL Server\90\Tools\binn\ NUMBER_OF_PROCESSORS = 1 OS = Windows_NT PROCESSOR_ARCHITECTURE = x86temp = %SystemRoot%\TEMP

20/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-14 主題:列出與 SYSTEM 相關的全部環境變數 連結:執行結果 檢視原始碼 程式碼重點WScript.Echo(" 所有的 SYSTEM 環境變數列表: ");

WScript.Echo("No. of env. variables = "+envObj.length); var Enum=new Enumerator(envObj) for (Enum.moveFirst(); !Enum.atEnd(); Enum.moveNext()) WScript.Echo(Enum.item());

21/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-15 主題:列出與 PROCESS 相關的全部環境變數 連結: 執行結果 檢視原始碼 程式碼重點WScript.Echo(" 所有的 PROCESS 環境變數列表: ");

WScript.Echo("No. of env. variables = "+envObj.length); var Enum=new Enumerator(envObj) for (Enum.moveFirst(); !Enum.atEnd(); Enum.moveNext()) WScript.Echo(Enum.item());

22/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-17 主題:列出電腦、網域名稱及使用者名稱等資訊

連結:執行結果 檢視原始碼 程式碼

wshNetwork=WScript.CreateObject("WScript.Network"); WScript.Echo(" 電腦名稱: " + wshNetwork.ComputerName); WScript.Echo(" 網域名稱: " + wshNetwork.UserDomain); WScript.Echo(" 使用者名稱: " + wshNetwork.UserName);

24/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-18 主題:顯示此機器的所有使用者

連結:執行結果 檢視原始碼 說明

如果使用者只有一個,通常是 administrator 。

25/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-5 :網頁伺服器的管理

本小節將以範例說明使用 WSH 來管理微軟的網頁伺服器

26/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-19 主題:列出 IIS 網頁伺服器的性質

連結:執行結果 檢視原始碼 說明

可以修改性質來更改 iis 各種屬性。

27/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-20 主題:產生虛擬目錄

連結: 執行結果 檢視原始碼 說明

首先定義位址物件,“ IIS://LocalHost/W3SVC/1/Root”表示於預設的 Web 站台的主目錄下建立虛擬目錄。

使用“Create("IISWebVirtualDir","虛擬目錄名稱 ")”方法,以建立虛擬目錄。

執行後產生的虛擬目錄是 winTemp,對應到實際硬碟的目錄是 c:\windows\temp。經由「控制台 /系統管理工具 /Internet Information Services」可以開啟 IIS 管理介面,以確認虛擬目錄 winTemp 的存在。

28/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-21 主題:使用 WSH 來控制 IIS 網頁伺服器

連結:執行結果 檢視原始碼 程式碼

說明 範例中,我們可以對 IIS 進行暫停、繼續、停止、啟動等控制。

iisObj = GetObject("IIS://LocalHost/W3SVC/1");iisObj.Pause(); WScript.Echo("暫停 IIS 伺服器! "); iisObj.Continue(); WScript.Echo("繼續 IIS 伺服器! "); iisObj.Stop(); WScript.Echo("停止 IIS 伺服器! ");iisObj.Start(); WScript.Echo(" 啟動 IIS 伺服器! ");

29/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-6 :通用表示法的應用

本小節說明在 WSH 也可以使用通用表示法,此方式可以讓我們很快地在大量文字中間找到我們所要的資訊。

30/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-22 主題:找出一個網頁的標題

連結:執行結果 檢視原始碼 說明

此程式碼會重從 test.htm 找出此網頁的標題,印出結果如下

在上述範例中, title[1] 和 RegExp.$1 儲存相同的結果。

網頁標題 = 國立臺灣大學 資訊工程學系網頁標題 = 國立臺灣大學 資訊工程學系

31/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-23 主題:找出以 JScript 為主 WSH 檔案的第一列註解

連結:執行結果 檢視原始碼 程式碼重點

說明 印出結果

本範例前半段與上一範例相同

WScript.Echo(" 第一註解列 = " + title[1]);

第一註解列 = 抓出 WSH 程式碼( JScript)的第一註解列

32/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-24 主題:對範例目錄製作 index.asp 的檔案

Webpage: remote host, local host 說明

採用 6-2 的方式,可以對範例目錄製作一個 index.asp 的檔案,即時地將每一個 js 檔案的第一列註解列印出來,形成一頁對 WSH 的所有 JScript 範例的列表和簡單說明

33/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-25 主題:從一段文字中,抽取連結文字與相關網址

連結:執行結果 檢視原始碼 說明

顯示結果如下: <a href ="url1">text1</a> ===> URL=url1, TEXT=text1 <a href ="url2">text2</a> ===> URL=url2, TEXT=text2 <a href ="url3">text3</a> ===> URL=url3, TEXT=text3

34/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-26 主題:從一個檔案中,抽取連結文字與相關網址

連結:執行結果 檢視原始碼 說明

務必將程式碼 linkExtraction02.js 和網頁檔案 test.htm 放在同一個目錄。

35/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-7 :網頁抓取與處理

本小節將說明如何使用 WSH 來直接抓取網頁

36/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

使用 InetCtls.Inet 若要使用 WSH 來直接抓取網頁,可以使用 Visual

Basic 6 的元件 InetCtls.Inet 安裝方法如下

從下列網址下載壓縮檔案 msinet.cab :http://activex.microsoft.com/controls/vb6/msinet.cab

(近端備份: ...\wsh\download\msinet.cab ) 對 msinet.cab 進行解壓縮,得到 MSINET.INF 和

MSINET.OCX ,將這兩個檔案放到 c:\windows\system32 目錄下。

開啟 DOS 視窗,進入 c:\windows\system32 目錄,執行「 regsvr32 msinet.ocx 」,即可完成安裝。 37/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-27 主題:使用 WSH 來直接抓取網頁

連結:執行結果 檢視原始碼 程式碼

說明 欲下載之網頁與設定的嘗試時間皆可依需求更改

inet=new ActiveXObject("InetCtls.Inet"); // 取得 Inet Control 物件 inet.Url="http://www.cs.nthu.edu.tw"; // 欲下載之網頁 inet.RequestTimeOut=60; // 設定嘗試時間 WScript.Echo("Downloading \""+inet.Url+"\"..."); content = inet.OpenURL(); // 下載網頁 WScript.Echo(content); // 顯示網頁內容

38/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-28 主題:使用通用運算式,便可以在抓取網頁後,顯示此網頁的標題 連結:執行結果 檢視原始碼 程式碼重點

說明 最後一行的功能為顯示結果

WScript.Echo("Downloading \""+inet.Url+"\"..."); content = inet.OpenURL(); // 下載網頁 pattern = /<title>(.*)<\/title>/i; // 定義通用表示式 title = pattern.exec(content); // 抓出標題 WScript.Echo(" 位於「 "+inet.Url+" 」的網頁的標題是「 "+RegExp.$1+" 」! ");

39/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-29 主題:在抓取一個網頁後,立即將網頁儲存到硬碟中的某個檔案 連結:執行結果 檢視原始碼 程式碼

說明 此段程式碼的目的是將網頁內容寫入本機檔案

fso = new ActiveXObject("Scripting.FileSystemObject"); forReading=1, forWriting=2; fileName="test.htm"; fid=fso.OpenTextFile(fileName, forWriting, true); fid.Write(content); fid.Close(); WScript.Echo(" 從「 "+inet.Url+" 」抓到的內容已被存入「 "+fileName+" 」! ");

40/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-30 主題:利用通用表示法抓出網頁中連結和相關文字

連結:執行結果 檢視原始碼 程式碼重點

pattern=/<A(.*?)<\/A>/gi; // 定義通用表示式 found=content.match(pattern); // 抓出連結 pattern2=/<\s*A\s+HREF\s*=\s*"?(.*?)"?\s*>(.*?)<\s*\/\s*A\s*>/i; // 另一個通用運算式 for (i=0; i<found.length; i++){ pattern2.exec(found[i]); WScript.Echo(found[i]+" ===> URL="+RegExp.$1+", TEXT="+RegExp.$2); } // 抓出連結的網址以及連結的文字

41/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-31 主題:使用WinHttpRequest物件抓取 Google首頁

連結:執行結果 檢視原始碼 說明

可以暫停網路,再試看看此範例,就會印出抓不到網頁的錯誤訊息了 前面範例所用的 InetCtls.Inet 元件,比較簡單,所以無法偵測網路斷線的情況,而 IIS內建的元件

WinHttp.WinHttpRequest,則有較多偵錯功能可以應付斷線的情況

42/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-8 :與資料庫整合

本小節將介紹如何用 WSH 來對資料庫整合

43/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-31 主題:用 WSH 來對資料庫列表

連結:執行結果 檢視原始碼 說明

執行後,在 DOS 命令視窗印出結果如下

原先以 JScript 進行資料庫列表的連結: listdb01.asp

欄位名稱: ssn account name team score 每一筆資料: 14 abc 葉佳慧 5 33.33 15 ABC 林政源 5 55.65 17 jtchen 陳江村 3 48.76 18 aBc 高名揚 1 67.88

44/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-32 主題:以 wsh 對資料庫進行新增

連結:執行結果 檢視原始碼 程式碼重點

說明 SQL 指令的 where 條件式是不分大小寫的,所以如果條件式是 name=‘abc’ ,抓出來的資料可能包含 ‘ abc’ 、‘ ABC’ 、‘ aBc’ 等資料,若要解決此問題,請見下一個範例。

SQL="INSERT INTO testTable ([account], [name]) VALUES ('new1', 'new2')"; Conn.Execute(SQL);

45/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-33 主題:使用 strcomp 函數避免 SQL 大小寫問題

連結:執行結果 檢視原始碼 程式碼重點

說明 sql2screen() 函數的功能是將 SQL 指令的結果列印在螢幕上,下個範例將說明如何把結果記錄在檔案中

sql="select * from testTable where account='abc'"; WScript.Echo(" 大小寫不分的比對: sql = "+sql); WScript.Echo("比對結果: "); sql2screen("test.mdb", sql); sql="select * from testTable where strcomp(account, 'abc',0)=0"; WScript.Echo(" 大小寫有別的比對: sql = "+sql); WScript.Echo("比對結果: "); sql2screen("test.mdb", sql);

46/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-34 主題:將 SQL 指令的結果記錄在檔案之中

連結:執行結果 檢視原始碼 說明

此範例會將 testTable 資料表的內容儲存到 output.txt 。

sql2file() 函數的功能即是將 SQL 指令的結果記錄在檔案之中。

47/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-9 使用 wsInetTools.dll

本小節將使用幾個範例來說明此元件的功能

48/61

JavaScript 程式設計與應用:用於單機的 WSH 環境 wsInetTools.dll 的功能與下

載 我們可以經由各種元件來加強 WSH 的功能 wsInetTools.dll 是一個使用 C++ 開發的元件,主要有下列三項功能 抓取網頁 抓取二進制檔案(例如 mp3 、 midi 等檔案) 寄發電子郵件

http://www.winscripter.com/Downloads/default.aspx 可下載相關的 zip 檔案,解開以後,就可以看到 wsInetTools.dll 及相關的範例及說明。相關的說明,可見下載後的 index.htm

49/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

使用 wsInetTools.dll 使用此元件之前,必須先將此元件登錄於系統之中,可以分成兩步驟: 將 wsInetTools.dll 拷貝到 c:\windows\

system32\ 之下。 點選「開始 / 執行」,然後輸入 「 regsvr32 wsInetTools.dll 」,按下「確定」,就完成了元件登錄的動作。

完成上述步驟後,就可以開始使用wsInetTools.dll

50/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-35 主題:直接抓取 HTML 網頁

連結:執行結果 檢視原始碼 程式碼

說明 此範例使用了 wsInetTools.dll 抓取 HTML 檔案

web = new ActiveXObject("wsInetTools.HTTP"); // 取得 COM 物件 url = "http://www.cs.nthu.edu.tw"; // 欲下載之網頁 contents = web.GetWebPage(url); // 開始下載網頁 WScript.Echo(" 下載「 "+url+" 」成功!檔案內容如下: "); WScript.Echo(contents); // 顯示網頁內容

51/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-36 主題:抓取二進制檔案

連結:執行結果 檢視原始碼 程式碼重點

說明 二進制檔案,即例如 MIDI 或 MP3 檔案等。

remoteFile = “http://neural.cs.nthu.edu.tw/jang/books/JavaScript/example/music/tomorrow.mid”; // 遠端檔案 localFile = "tomorrow.mid"; // 本機檔案 web.GetBinary(remoteFile, localFile); // 開始下載 WScript.Echo(" 下載「 "+remoteFile+" 」成功! "); WScript.Echo("存成近端檔案:「 "+localFile+" 」! ");

52/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-37 主題:寄發郵件

連結:執行結果 檢視原始碼 程式碼重點

說明 利用此元件,我們也可以在 ASP 的程式碼裡面寄送郵件

mail.MailServer = "wayne.cs.nthu.edu.tw"; // 設定郵件伺服器 from = "[email protected]"; // 發信人 to = "[email protected]"; // 收信人 subject = "Testing wsInetTools"; // 主題 body = "This is just a test message.\r\n Please ignore it.\r\n\r\nRoger Jang"; // 內文 mail.SendMail(from, to, subject, body); // 開始寄發郵件 WScript.Echo("寄送郵件成功! ");

53/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

24-10 :傳送鍵盤事件

本小節說明如何使用 sendKeys() 函數來傳送鍵盤事件

54/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-38 主題:開啟 IE 並執行列印的動作

連結:執行結果 檢視原始碼 說明

WshShell.SendKeys("%{f}") 代表執行 Alt-f 按鍵, WshShell.SendKeys("p") 代表執行按鍵 p ,而 WshShell.SendKeys("{ENTER}") 代表執行按鍵 Enter ,依此類推。

插進幾列 WScript.Sleep(1000) ,則在按鍵後,會先等候 1 秒鐘,此方法可使整個操作過程更加穩定

55/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

特殊按鍵的相關呼叫方式 (1)

按鍵 呼叫方式 SHIFT +

CONTROL ^

ALT %

LEFT ARROW {LEFT}

RIGHT ARROW {RIGHT}

UP ARROW {UP}

DOWN ARROW

{DOWN}

{ {{}

} {}}

[ {[}

] {]}

按鍵 呼叫方式 ~ {~}

+ {+}

^ {^}

BACKSPACE {BACKSPACE}, {BS}, or {BKSP}

BREAK {BREAK}

CAPS LOCK {CAPSLOCK}

DEL or DELETE

{DELETE} or {DEL}

END {END}

ENTER {ENTER} or ~

ESC {ESC}

HELP {HELP} 56/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

特殊按鍵的相關呼叫方式 (2)按鍵 呼叫方式 F1 {F1}

F2 {F2}

F3 {F3}

F4 {F4}

F5 {F5}

F6 {F6}

F7 {F7}

F8 {F8}

F9 {F9}

F10 {F10}

F11 {F11}

F12 {F12}

按鍵 呼叫方式 HOME {HOME}

INS or INSERT {INSERT} or {INS}

NUM LOCK {NUMLOCK}

PAGE DOWN {PGDN}

PAGE UP {PGUP}

PRINT SCREEN

{PRTSC}

SCROLL LOCK {SCROLLLOCK}

57/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-39 主題:開啟記事本並寫入文字

連結:執行結果 檢視原始碼 說明

使用 SendKeys 去開啟記事本並寫入文字、存檔於 junk.txt

在此範例中,我們可以將英文寫入記事本,但若要將中文送入,以目前的試驗來說,會出現亂碼。一個簡單的解決方案,就是先將中文送剪貼簿,再貼到記事本即可。

58/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-40 主題:開啟 IE 並設定預設網頁

連結:執行結果 檢視原始碼 程式碼

說明 第三個“ WScript.Sleep(5000);” 是等待網頁載入

WshShell=new ActiveXObject("WScript.Shell"); WshShell.Run("iexplore", 9); WScript.Sleep(5000); WshShell.SendKeys("%t"); WshShell.SendKeys("o"); WScript.Sleep(500); WshShell.SendKeys("http://www.google.com"); WScript.Sleep(500); for (i=0; i<13; i++) WshShell.SendKeys("{TAB}"); WshShell.SendKeys("{ENTER}"); WScript.Sleep(500);

59/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

範例 24-41 主題:利用記事本讀入一個文字檔,將文字檔的編碼方式改成 UTF-8 ,並另存新檔 連結:執行結果 檢視原始碼

說明 利用 UTF-8 的編碼方式,就可以同時顯示各國不同的文字於同一個文字檔案。

如果輸入檔名是相對路徑,則在使用前,必需確認 notepad 的預設儲存目錄是正確的目錄

若要檢視這兩個檔案的不同,可用網頁瀏覽器來顯示這兩個檔案,並由下拉選單「檢視 /編碼」,就可以看出這兩個檔案在編碼上的不同。

60/61

JavaScript 程式設計與應用:用於單機的 WSH 環境

相關說明 其他傳送鍵盤事件相關說明,可見微軟官方網頁:

http://www.microsoft.com/technet/scriptcenter/guide/sas_wsh_hilv.mspx?mfr=true

61/61