VBScript: Windows脚本宿主介绍
Windows腳本宿主(Windows Script Host, WSH)是一個(gè)Windows管理工具。WSH創(chuàng)建了一個(gè)腳本運(yùn)行的主環(huán)境,WSH使腳本能夠使用對象和服務(wù),并提供腳本執(zhí)行的準(zhǔn)則。WSH還負(fù)責(zé)安全管理以及調(diào)用適當(dāng)?shù)哪_本引擎。
使用Windows腳本宿主運(yùn)行腳本
WSH提供了兩個(gè)用于執(zhí)行腳本的接口,這兩個(gè)接口各使用不同的宿主程序作為VBScript引擎:
cscript.exe:用于在命令行中運(yùn)行腳本,
wscript.exe:用于在Windows環(huán)境中運(yùn)行腳本,直接與Windows GUI進(jìn)行交互。
這兩者就功能來講幾乎沒有區(qū)別。
Windows腳本宿主的內(nèi)建對象
1.WScript對象:WSH對象模型的基礎(chǔ)。
屬性:
Arguments,FullName,Interactive,Name,Path,ScriptFullName,ScriptName,StdErr,StdIn,StdOut,Version.
方法:
CreateObject,ConnectObject,DisconnectObject,Echo,GetObject,Quit,Sleep
2.WshArgument對象:是一個(gè)由WScript對象的Arguments屬性返回的集合(WScript.Arguments),下面為遍歷WshArguments集合的簡單循環(huán),依次顯示每個(gè)元素:
Set objArgs = WScript.Arguments For x = 0 To objArgs.Count - 1 WScript.Echo objArgs(x) Next3. WshNamed對象:WshNamed對象提供從命令行中對有名參數(shù)的訪問。
4. WshUnnamed對象:WshNamed對象提供從命令行中對無名參數(shù)的訪問。
- 使用WshArguments對象訪問整個(gè)參數(shù)集合。
- 使用WshNamed對象訪問有名字的參數(shù)。
- 使用WshUnamed對象訪問沒有名字的參數(shù)。
5.WshShell對象:用于獲取系統(tǒng)環(huán)境變量的訪問、創(chuàng)建快捷方式、訪問Windows的特殊文件夾,如Windows Desktop,以及添加或刪除注冊表?xiàng)l目,還可使用Shell對象的功能創(chuàng)建更多的定制對話款以進(jìn)行用戶交互。
1)訪問WshShell對象:要想使用WshShell對象的屬性和方法,必須創(chuàng)建一個(gè)WScript.Shell對象的實(shí)例。這樣以后對WshShell對象的引用實(shí)際就是對新創(chuàng)建實(shí)例的引用。
Set WshShell = WScript.CreateObject("WScript.Shell")
2)WshShell對象的屬性:
- CurrentDirectory:該屬性獲取或更改當(dāng)前活動目錄。返回一個(gè)字符串,其中包含當(dāng)前活躍進(jìn)程的當(dāng)前工作目錄的完整有效路徑名。
- Environment: 該屬性返回WshEnvironment對象(一個(gè)環(huán)境變量集合)。
object.Environment([strType])
strType:可選,指定環(huán)境變量的位置。包括:System,User,Volatile,Process
下例返回系統(tǒng)中存在的處理器個(gè)數(shù)。
Set WshShell = WScript.CreateObject("WScript.Shell") Set WshSysEnv = WshShell.Environment("SYSTEM") WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")- SpecialFolders: 該屬性返回一個(gè)SpecialFolders對象(一個(gè)特殊文件夾集合)。如果被請求的文件夾不可用,SpecialFolders屬性將返回一個(gè)空字符串。
object.SpecialFolders(objWshSpecialFolders)
下例將Start Menu文件夾保存在變量strDesktop變量中
strDesktop = WshShell.SpecialFolders("StartMenu")3)WshShell對象的方法(11個(gè)方法,均與操作系統(tǒng)shell相關(guān))
- AppActivate:該方法用于激活一個(gè)指定的已經(jīng)打開的應(yīng)用程序窗口。返回一個(gè)Boolean類型的值,標(biāo)志著過程調(diào)用是否成功。這個(gè)方法用于將焦點(diǎn)切換至指定名稱的應(yīng)用程序或窗口。
用法:object.AppActivate title
下例為打開計(jì)算器,并使用計(jì)算器計(jì)算3*5=15的過程(要運(yùn)行下面的代碼,需要將其保存為.wsf擴(kuò)展名的Windows腳本宿主文件)。
<package> <job id="vbs"> <script language="VBScript"> Set WshShell = WScript.CreateObject("WScript.Shell") WshShell.Run "calc" WScript.Sleep 100 WshShell.AppActivate "Calculator" WScript.Sleep 100 WshShell.SendKeys "1{+}" WScript.Sleep 500 WshShell.SendKeys "3" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 500 WshShell.SendKeys "*5" WScript.Sleep 500 WshShell.SendKeys "~" WScript.Sleep 2500 </script> </job> </package>- CreateShortcut: 該方法用于創(chuàng)建一個(gè)新的快捷方式,或打開一個(gè)已有的快捷方式。要創(chuàng)建一個(gè)快捷方式,必須完成下列三個(gè)步驟:
- 創(chuàng)建WshShortcut對象的一個(gè)實(shí)例。
- 初始化其屬性。
- 使用Save方法將其保存到磁盤。
用法:object.CreateShortcut(strPathname)
下例創(chuàng)建了一個(gè)記事本的快捷方式到桌面:
<package> <job id="vbs"> <script language="VBScript"> Set WshShell = WScript.CreateObject("WScript.Shell") strDesktop = WshShell.SpecialFolders("Desktop") Set oShellLink = WshShell.CreateShortcut(strDesktop & _ "\Shortcut Script.lnk") oShellLink.TargetPath = "%windir%\system32\notepad.exe" oShellLink.WindowStyle = 1 oShellLink.Hotkey = "CTRL+SHIFT+N" oShellLink.IconLocation = "nopepad.exe, 0" oShellLink.Description = "Shortcut to Notepad" oShellLink.WorkingDirectory = strDesktop oShellLink.Save </script> </job> </package>- ExpandEnvironmentStrings: 該方法返回環(huán)境變量的擴(kuò)充值,且只對PROCESS環(huán)境空間內(nèi)定義的環(huán)境變量進(jìn)行擴(kuò)充。環(huán)境變量的名稱必須以"%"包圍,并且是大小寫不敏感的。
用法:object.ExpandEnvironmentStrings(strString)
strString為一個(gè)字符串值,表示想要擴(kuò)充的環(huán)境變量的名稱。
Set WshShell = WScript.CreateObject("WScript.Shell") WScript.Echo "Then path to WinDir is " _ & WshShell.ExpandEnvironmentStrings("%WinDir%")- LogEvent: 該方法用于向日志文件中添加一個(gè)事件條目。
- Popup: 該方法用于在彈出式消息框中顯示文本。無論使用哪種宿主可執(zhí)行文件(wscript.exe或cscript.exe)運(yùn)行腳本,都可以使用Popup方法顯示一個(gè)消息框。
用法:intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType])
strText: 一個(gè)字符串值,包含了想要顯示在彈出式消息框中的文本。
nSecondsToWait: 一個(gè)數(shù)值,表示想要彈出式消息框現(xiàn)實(shí)的最長時(shí)間(以秒為單位)。默認(rèn)值為0,表示彈出式消息框一直可見,直到被關(guān)閉。
strTitle: 一個(gè)字符串值,指定想要出現(xiàn)在彈出式消息框標(biāo)題欄中的文本。若不指定,默認(rèn)值為"Windows Script Host"。
nType: 一個(gè)數(shù)值,表示想在彈出式消息框中出現(xiàn)的按鈕和圖標(biāo)的類型。
IntButton: 一個(gè)整數(shù)值,表示關(guān)閉消息框時(shí)單擊的按鈕的序號,這個(gè)值是由Popup方法返回的。
下面三個(gè)表格分別列出按鈕類型、圖標(biāo)類型、關(guān)閉消息框是所單擊的按鈕的編號:
按鈕類型:
| 值 | 描述 |
| 0 | 顯示OK按鈕 |
| 1 | 顯示OK和Cancel按鈕 |
| 2 | 顯示Abort、Retry和Ignore按鈕 |
| 3 | 顯示Yes、No和Cancel按鈕 |
| 4 | 顯示Yes和No按鈕 |
| 5 | 顯示Retry和Cancel按鈕 |
圖標(biāo)類型:
| 值 | 描述 |
| 16 | 顯示中止(Stop Mart)圖標(biāo) |
| 32 | 顯示問號(Question Mart)圖標(biāo) |
| 48 | 顯示嘆號(Exclamation Mark)圖標(biāo) |
| 64 | 顯示提示信息(Information Mark)圖標(biāo) |
關(guān)閉消息框時(shí)所單擊的按鈕的編號:
| 值 | 描述 |
| 1 | OK按鈕 |
| 2 | Cancel按鈕 |
| 3 | Abort按鈕 |
| 4 | Retry按鈕 |
| 5 | Ignore按鈕 |
| 6 | Yes按鈕 |
| 7 | No按鈕 |
舉例:
Dim WshShell, BtnCode Set WshShell = WScript.CreateObject("WScript.Shell") ? BtnCode = WshShell.Popup("Do you like this code?", 7, "Quick survey:", 4 + 32) ? Select Case BtnCode Case 6 WScript.Echo "Glad to hear it - Thanks!" Case 7 WScript.Echo "I'm sorry you didn't like it." Case -1 WScript.Echo "Helllloooooooo?" End Select- RegDelete: 該方法從注冊表中刪除一個(gè)鍵或其鍵值。如果strName以反斜杠結(jié)尾,就可以指定鍵名,如果不使用反斜杠,就可以指定鍵值名。
用法:object.RegDelete(strName)
下表給出了根鍵名及其縮寫:
| 根鍵名 | 縮寫 |
| HKEY_CURRENT_USER | HKCU |
| HKEY_LOCAL_MACHINE | HKLM |
| HKEY_CLASSES_ROOT | HKCR |
| HKEY_USERS | HKEY_USERS |
| HKEY_CURRENT_CONFIG | HKEY_CURRENT_CONFIG |
- RegRead: 該方法返回注冊表中一個(gè)鍵或鍵值的名稱。
用法:object.RegRead(strName)
一個(gè)鍵值包含三部分:如果指定了鍵名(相對于鍵值名來說),RegRead就會返回默認(rèn)的值。所以要讀取一個(gè)鍵的默認(rèn)值,只要指定鍵的名稱即可。
RegRead方法返回的值有5種類型:
| 類型 | 描述 | 形式 |
| REG_SZ | 字符串 | 字符串 |
| REG_DWORD | 數(shù)字 | 整數(shù) |
| REG_BINARY | 二進(jìn)制值 | 整數(shù)構(gòu)成的VBArray |
| REG_EXPAND_SZ | 可擴(kuò)充字符串(例如%windir%\\notepad.exe) | 字符串 |
| REG_MULTI_SZ | 字符串?dāng)?shù)組 | 字符串構(gòu)成的VBArray |
- RegWrite: 該方法可以創(chuàng)建一個(gè)新鍵,給現(xiàn)有鍵添加另一個(gè)鍵值名(并制定一個(gè)值),或修改現(xiàn)有鍵值名的值。
用法:object.RegWrite(strName, anyValue [,strType])
strName: 一個(gè)字符串值,表示想要創(chuàng)建、添加或修改的鍵名、鍵值名或鍵值。
anyValue: 想要創(chuàng)建的新鍵的名稱,或想添加到現(xiàn)有鍵的鍵值名,或想指定給某個(gè)現(xiàn)有鍵值名的新鍵值。
strType: 一個(gè)表示鍵值數(shù)據(jù)類型的字符串。RegWrite方法不支持REG_MULTI_SZ類型,支持上表中的其余四種類型。
Dim WshShell, bKey Set WshShell = WScript.CreateObject("WScript.Shell") 'RegWrite部分 WshShell.RegWrite "HKCU\Software\WROX\VBScript\",1,"REG_BINARY" WshShell.RegWrite "HKCU\Software\WROX\VBScript\ProgRef","VB_is_great","REG_SZ" 'RegRead部分 bKey = WshShell.RegRead("HKCU\Software\WROX\VBScript\") WScript.Echo WshShell.RegRead("HKCU\Software\WROX\VBScript\ProgRef") 'RegDelete部分 WshShell.RegDelete "HKCU\Software\WROX\VBScript\ProgRef" WshShell.RegDelete "HKCU\Software\WROX\VBScript\" WshShell.RegDelete "HKCU\Software\WROX\"- Run: Run方法在一個(gè)新進(jìn)程中運(yùn)行一個(gè)程序。
用法:object.Run(strCommand,[intWindowStyle],[bWaitOnReturn])
在AppActivate方法示例中已經(jīng)用到過Run方法。下例代碼打開命令提示符窗口并顯示C盤內(nèi)容:
Dim oShell Set oShell = WScript.CreateObject("WScript.Shell") oShell.Run "cmd /K CD C:\ & Dir" Set oShell = Nothing- SendKeys: SendKeys方法向活躍窗口發(fā)送一次或多次擊鍵(仿佛來自鍵盤)。
用法:object.SendKeys(string)
要發(fā)送一個(gè)單獨(dú)的鍵盤字符,只要將該字符本身作為字符串參數(shù)發(fā)送即可,如"x";
也可以發(fā)送多次擊鍵,如,要發(fā)送擊鍵x、y和z,可以發(fā)送字符串參數(shù)"xyz";
要發(fā)送特殊字符,包括圓括弧、尖括弧、花括弧以及加號(+),上尖號(^),百分號(%),波浪號(~),可以將它們包含在一對花括弧"{}"中間,如發(fā)送加號,可以發(fā)送字符串"{+}"。
- Exec: Exec方法在一個(gè)子命令解釋器中運(yùn)行一個(gè)應(yīng)用程序,子命令解釋器提供對StdIn、StdOut和StdErr流的訪問。該方法只能執(zhí)行命令行應(yīng)用程序,并且不能用于運(yùn)行遠(yuǎn)程腳本。
6. WshNetwork對象: WshNetwork對象提供對計(jì)算機(jī)所連接的網(wǎng)絡(luò)上共享資源的訪問。
1)訪問WshNetwork對象: 通過創(chuàng)建WScript.Network對象的實(shí)例實(shí)現(xiàn)。
2)WshNetwork對象的屬性:
- ComputerName
- UserDomain
- UserName
下例用到了這三個(gè)屬性:
<package> <job id = "vbs"> <script language="VBScript"> Set WshNetwork = WScript.CreateObject("WScript.Network") WScript.Echo "Domain = " & WshNetwork.UserDomain WScript.Echo "Computer Name = " & WshNetwork.ComputerName WScript.Echo "User Name = " & WshNetwork.UserName </script> </job> </package>3)WshNetwork對象的方法:
AddWindowsPrinterConnection: 在計(jì)算機(jī)系統(tǒng)中添加一個(gè)Windows打印機(jī)連接。
AddPrinterConnection: 在計(jì)算機(jī)系統(tǒng)中添加一個(gè)遠(yuǎn)程打印機(jī)連接。
EnumPrinterDrives:返回當(dāng)前網(wǎng)絡(luò)驅(qū)動器的映射信息。
EnumPrinterConnection:返回當(dāng)前網(wǎng)絡(luò)打印機(jī)的映射信息。
MapNetworkDrive:在計(jì)算機(jī)系統(tǒng)中添加一個(gè)共享網(wǎng)絡(luò)驅(qū)動器。
RemoveNetworkDrive:在計(jì)算機(jī)系統(tǒng)中刪除一個(gè)共享的網(wǎng)絡(luò)驅(qū)動器。
RemovePrinterConnection:在計(jì)算機(jī)系統(tǒng)中刪除一個(gè)共享的網(wǎng)絡(luò)打印機(jī)連接。
SetDefaultPrinter:將某個(gè)遠(yuǎn)程打印機(jī)指定為默認(rèn)打印機(jī)。
7.WshEnvironment對象:提供對Windows環(huán)境變量集合的訪問。
屬性方法略。
8. WshSpecialFolders對象:提供對Windows特殊文件夾集合的訪問。
屬性方法略。
9. WshShortcut對象:允許使用腳本創(chuàng)建快捷方式。
屬性方法略。
10. WshUrlShortcut對象:允許使用腳本創(chuàng)建到Internet資源的快捷方式。
屬性方法略。
?
本文參考資料:
《VBScript程序員參考手冊》
轉(zhuǎn)載于:https://www.cnblogs.com/ITGirlXiaoXiao/p/3191100.html
總結(jié)
以上是生活随笔為你收集整理的VBScript: Windows脚本宿主介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序——校园服务小程序(二)校园论
- 下一篇: 2011 年上半年软考5 月 信息系统项