小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Wscript對象詳解

 nxhujiee 2019-02-25

15.6  Windows腳本宿主的內(nèi)建對象

每個編程環(huán)境都提供了自己的對象模型,開發(fā)人員 可以使用這些對象模型實現(xiàn)各種解決方案,WSH也不例外。WSH包含了一組核心對象,分別包含了屬性和方法,可以用于訪問網(wǎng)絡(luò)中的其他計算機(jī)、導(dǎo)入外部的 可腳本化對象以供應(yīng)用程序使用,或者連接到Windows或Windows Shell。

15.6.1  WScript對象

WSH對象模型的基礎(chǔ)就是WScript對象。這個對象提供了使開發(fā)人員能夠訪問各種信息的屬性和方法,如:

●       將要執(zhí)行的腳本的名稱和路徑信息

●       Microsoft腳本引擎的版本

●       與外部對象的鏈接

●       與用戶的交互

●       延遲或中斷腳本執(zhí)行的能力

1. WScript的屬性

WScript對象具有下列屬性:

●       Arguments

●       FullName

●       Interactive

●       Name

●       Path

●       ScriptFullName

●       ScriptName

●       StdErr

●       StdIn

●       StdOut

●       Version

Argument

Argument屬性包含了WshArguments對象(一個參數(shù)集合)。從該集合中獲取單個參數(shù)時,使用由0開始的索引。

Set objArgs = WScript.Arguments

For x = 0 to objArgs.Count - 1

WScript.Echo objArgs(x)

Next

FullName

FullName屬性是一個只讀的字符串,它代表宿主可執(zhí)行文件(cscript.exe或wscript.exe)的有效完整路徑。下面的代碼使用了FullName屬性。

WScript.Echo WScript.FullName

這段代碼產(chǎn)生如圖15-4的輸出。

圖15-4

Interactive

Interactive屬性設(shè)置腳本的模式,或識別腳本的模式。使用該屬性會返回一個布爾值。有兩種可用的模式:批處理模式和交互模式。

在交互模式下(默認(rèn)情況),腳本可以與用戶進(jìn)行交互。可以向WSH輸入信息,WSH也可以輸出信息,信息被顯示在對話框中,等待用戶提供反饋。在批處理模式中,不支持用戶交互,不支持WSH的輸入和輸出。

可以使用WSH命令行開關(guān)腳本模式//I(交互模式)和//B(批處理模式)來設(shè)置腳本模式。

Name

Name屬性返回WScript對象(宿主可執(zhí)行文件)的名稱,它是一個只讀的字符串。下面的代碼使用了Name屬性:

WScript.Echo WScript.Name

這段代碼產(chǎn)生如圖15-4的輸出。

圖15-5

Path

Path屬性返回包含宿主可執(zhí)行文件(cscript.exe或wscript.exe)的目錄名。該屬性返回一個只讀的字符串。

下面的VBScript代碼將顯示可執(zhí)行文件所在的目錄名:

WScript.Echo WScript.Path

ScriptFullName

ScriptFullName屬性返回當(dāng)前正在運(yùn)行的腳本的完整路徑。該屬性返回一個只讀的字符串。

ScriptName

ScriptName屬性返回當(dāng)前正在運(yùn)行的腳本的文件名。該屬性返回一個只讀的字符串。下面的代碼顯示了正在運(yùn)行的腳本的名稱,如圖15-6所示:

WScript.Echo WScript.ScriptName

圖15-6

StdErr

StdErr屬性開放當(dāng)前腳本的只寫的錯誤輸出流。該屬性返回一個標(biāo)識標(biāo)準(zhǔn)錯誤流的對象。只有使用cscript.exe時才能訪問StdIn、StdOut和StdErr流。使用wscript.exe時如果想訪問這些流就會產(chǎn)生一個錯誤。

StdIn

StdIn屬性開放當(dāng)前腳本的只讀的輸入流。該屬性返回一個標(biāo)識標(biāo)準(zhǔn)錯誤流的對象。只有使用cscript.exe時才能訪問StdIn、StdOut和StdErr流。使用wscript.exe時如果想訪問這些流就會產(chǎn)生一個錯誤。

StdOut

StdOut屬性開放當(dāng)前腳本的只寫的錯誤輸出流。該屬性返回一個標(biāo)識標(biāo)準(zhǔn)錯誤流的對象。只有使用cscript.exe時才能訪問StdIn、StdOut和StdErr流。使用wscript.exe時如果想訪問這些流就會產(chǎn)生一個錯誤。

下面的示例使用了這三種類型的內(nèi)建流打印匹配某一特定擴(kuò)展名的所有文件列表。這是通過將DOS的dir命令結(jié)果使用管道重定向到過濾器腳本來實現(xiàn)的,其中將擴(kuò)展名字符串作為參數(shù)。

' Usage: dir | cscript filter.vbs ext

'     ext: file extension to match

'

Dim streamOut, streamIn, streamErr

Set streamOut = WScript.StdOut

Set streamIn = WScript.StdIn

Set streamErr = WScript.StdErr

Dim strExt, strLineIn

Dim intMatch

strExt = WScript.Arguments(0)

intMatch = 0

Do While Not streamIn.AtEndOfStream

strLineIn = streamIn.ReadLine

If 0 = StrComp(strExt, Right(strLineIn, Len(strExt)), _

vbTextCompare) Then

streamOut.WriteLine strLineIn

intMatch = intMatch + 1

End If

Loop

If 0 = intMatch Then

streamErr.WriteLine "No files of type '" & strExt & "' found"

End If

因為這個示例中使用StdIn、StdOut和 StdErr進(jìn)行消息的處理,所以不僅能將匹配的文件打印在屏幕上,也能夠?qū)⑤敵鼋Y(jié)果發(fā)送到一個文本文件或其他有重定向或附加管道功能的應(yīng)用程序中。例如,可以使用下面的命令創(chuàng)建一個文件,包含整個目錄樹,包括子目錄中的所有.vbs文件:

C:/wsh>dir /s | cscript filter.vbs vbs >> vbsfiles.txt

Version

該屬性返回WSH的版本。下面的代碼顯示當(dāng)前WSH的版本,如圖15-7所示:

WScript.Echo WScript.Version

圖15-7

2 WScript的方法

WScript對象具有下列方法:

●       CreateObject

●       ConnectObject

●       DisconnectObject

●       Echo

●       GetObject

●       Quit

●       Sleep

CreateObject

WScript對象的這個方法用于創(chuàng)建一個COM對象。

object.CreateObject(strProgID[,strPrefix])

●       object:WScript對象。

●       strProgID:值為字符串,表示想要創(chuàng)建的對象的程序標(biāo)識符(ProgID)。

●       strPrefix:可選。值為字符串,表示函數(shù)前綴。

使用CreateObject方法和strPrefix參數(shù)創(chuàng)建的對象是已連接對象。對象被創(chuàng)建后,其輸出接口與腳本文件相連接。每個事件函數(shù)都由這個前綴加上事件的名稱來命名。

如果創(chuàng)建對象時沒有使用strPrefix參數(shù),也可以使用ConnectObject方法同步對象的事件。只要對象產(chǎn)生一個事件,WSH就會調(diào)用一個子程序,其名稱是strPrefix加上事件的名稱。

下面的代碼使用CreateObject方法創(chuàng)建一個WshNetwork對象:

Set WshNetwork = WScript.CreateObject("WScript.Network")

ConnectObject

該方法將對象的事件源連接到具有給定前綴的函數(shù)。

object.ConnectObject(strObject, strPrefix)

●       object:WScript對象。

●       strObject:必需的。表示想要連接的對象名稱的字符串。

●       strPrefix:必需的。表示函數(shù)前綴的字符串。

同步一個對象的事件時,已連接對象是很有用的。對象被創(chuàng)建后,ConnectObject方法將對象的輸出接口連接到腳本文件。事件函數(shù)的名稱就是這個前綴加上事件的名稱。

WScript.ConnectObject RemoteScript, "remote_"

DisconnectObject

該方法用于斷開已連接對象的事件源的連接。

object.DisconnectObject(obj)

●       object:WScript對象。

●       obj:表示想要斷開連接的對象名稱的字符串。

斷開一個對象的連接意味著WSH無法再響應(yīng)它的事件。但是,有一點很重要,那就是斷開連接后對象仍然能夠產(chǎn)生事件。還要注意的是,如果指定的對象尚未連接,DisconnectObject方法就不會做任何事。

WScript.DisconnectObject RemoteScript

Echo

該方法輸出一個消息框或一個命令控制臺窗口。

object.Echo [Arg1] [,Arg2] [,Arg3] ...

●       object:WScript對象。

●       Arg1、Arg2、Arg3、……:可選。表示要顯示項目的列表。

根據(jù)當(dāng)前使用的WSH引擎的不同,Echo方法輸出的類型也有所變化(參見表15-3)。

表15-3

WSH引擎

文 本 輸 出

Wscript.exe

圖形消息框

Cscript.exe

命令控制臺窗口

圖15-8和圖15-9顯示了這兩種輸出的示例。

圖15-8

圖15-9

GetObject

GetObject方法根據(jù)指定的ProgID獲取某個已存在對象,或從文件創(chuàng)建一個新的對象。

object.GetObject(strPathname [,strProgID], [strPrefix])

●       object:WScript對象。

●       strPathname:包含將對象保存到磁盤的文件所使用的完整的有效路徑名。

●       strProgID:可選。值為字符串,表示想要創(chuàng)建的對象的程序標(biāo)識符(ProgID)。

●       strPrefix:可選。進(jìn)行對象事件同步時有用。如果提供了strPrefix參數(shù),WSH就會在創(chuàng)建對象之后將對象的輸出接口連接到腳本文件。

如果內(nèi)存中存在對象的一個實例,或者想從文件創(chuàng)建一個對象,都需要使用GetObject方法。GetObject方法適用于所有COM類,與創(chuàng)建對象使用的腳本語言無關(guān)。

如果內(nèi)存不存在對象的實例,也不想從文件創(chuàng)建對象,就可以使用CreateObject方法。

Dim MyObject As Object

Set MyObject = GetObject("C:/DRAWINGS/SCHEMA.DRW")

MyApp = MyObject.Application

Quit

該方法強(qiáng)制腳本在任意時刻立即停止執(zhí)行。

object.Quit([intErrorCode])

●       object:WScript對象。

●       intErrorCode:可選。返回一個整數(shù)值,作為進(jìn)程的返回碼。如果忽略intErrorCode參數(shù),就不會有返回值。

Quit方法可以用于返回一個可選的錯誤代碼。如果Quit方法是腳本中的最后一條命令(并且不需要返回一個非零值),就可以不使用任何參數(shù),這樣腳本就會正常退出。

WScript.Quit 1

' This line of code is not executed.

MsgBox "This message will never be shown!"

下面給出了Quit方法實際運(yùn)行的示例。

If Err.Number <> 0 Then

WScript.Quit 1 ' some failure indicator Else

WScript.Quit 0 ' success

End If

WScript.Quit 1

Sleep

該方法將腳本的執(zhí)行掛起一段時間,然后接著執(zhí)行。

object.Sleep(intTime)

●       object:WScript對象。

●       intTime:這是一個整數(shù)值,表示希望腳本進(jìn)程保持非活躍狀態(tài)的時間間隔(以毫秒為單位)。

使用這個方法時,運(yùn)行腳本的線程被掛起,占用的CPU被釋放。當(dāng)間隔時間到,就會繼續(xù)恢復(fù)執(zhí)行。要想被事件所觸發(fā),腳本必須持續(xù)活躍,因為已經(jīng)結(jié)束執(zhí)行的腳本是肯定不能檢測到任何事件的。腳本所處理的事件在腳本休眠時仍然會被執(zhí)行。

向Sleep方法傳遞0或-1作為參數(shù),就不會導(dǎo)致腳本不確定性地掛起。

<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 "2"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 500

WshShell.SendKeys "*9"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 2500

</script>

</job>

</package>

15.6.2  WshArguments對象

編程過程中,參數(shù)的使用是一種非常有益的機(jī)制,可以給腳本提供輸入以支持它的工作。如果考慮在DOS提示符下工作,那么多數(shù)命令行可執(zhí)行文件都使用參數(shù)來確定要做的事情。例如,瀏覽一個目錄樹:

c:/>cd wsh

在這個例子中,cd是一個DOS命令的名稱(用于切換目錄),而wsh是要激活的目錄的名稱—— 它是作為參數(shù)被傳遞給cd的。

創(chuàng)建使用參數(shù)的腳本是編寫可重用代碼的一個良好開端。創(chuàng)建設(shè)計用于在命令行中執(zhí)行的腳本的開發(fā)人員會立竿見影地感受到使用Arguments屬性帶來的好處。不過,在WSH中,還有更好的理由來使用這個對象,因為這就是拖放功能得以實現(xiàn)的原因。

使用這個對象的最后一個好處就是它允許開發(fā)人員在其他腳本中重用腳本代碼,只要以命令行運(yùn)行的方式運(yùn)行想重用的腳本,并給它傳遞可能在運(yùn)行時需要的參數(shù)即可。

1. 訪問WshArgument對象

它是通過使用WScript.Arguments屬性來實現(xiàn)的。

Set objArgs = WScript.Arguments

2 WshArgument對象的屬性

WshArgument對象是一個由WScript對象的Arguments屬性返回的集合(WScript.Arguments)。

訪問命令行參數(shù)集合有下列三種方法:

●       使用WshArguments對象訪問整個參數(shù)集合。

●       使用WshNamed對象訪問有名字的參數(shù)。

●       使用WshUnnamed對象訪問沒有名字的參數(shù)。

下面的例子是一個遍歷WshArguments集合的簡單循環(huán),依次顯示每個元素:

Set objArgs = WScript. Arguments

For x = 0 to objArgs.Count - 1

WScript.Echo objArgs(x)

Next

有趣的是,這段代碼既適用于cscript.exe,也適用于wscript.exe,可以使用示例echoargs.vbs來嘗試這一點。在命令行中運(yùn)行時,傳遞一些參數(shù):

c:/vbs/echoargs Hello, World!

圖15-10顯示了命令行輸出。

圖15-10

現(xiàn)在可以嘗試拖動一兩個文件,并將它們放到echoargs.vbs上。圖15-11顯示了這樣做輸出的結(jié)果。

圖15-11

15.6.3  WshShell對象

Windows腳本宿主提供了一種便捷的方式,可以用于獲取系統(tǒng)環(huán)境變量的訪問、創(chuàng)建快捷方式、訪問Windows的特殊文件夾,如Windows Desktop,以及添加或刪除注冊表條目。還可以使用Shell對象的功能創(chuàng)建更多的定制對話框以進(jìn)行用戶交互。

1 訪問WshShell對象

要使用下面這一節(jié)中將要列出的屬性,程序員必須創(chuàng)建一個WScript.Shell對象的實例。這樣以后對WshShell對象的引用實際就是對新創(chuàng)建實例的引用。

Set WshShell= WScript.CreateObject( "WScript.Shell" )

2 WshShell對象的屬性

WshShell對象有三個屬性:

●       CurrentDirectory

●       Environment

●       SpecialFolders

CurrentDirectory

該屬性獲取或更改當(dāng)前活動目錄。

object.CurrentDirectory

●       object:WshShell對象。

CurrentDirectory屬性返回一個字符串,其中包含當(dāng)前活躍進(jìn)程的當(dāng)前工作目錄的完整有效路徑名。

Dim WshShell

Set WshShell = WScript.CreateObject("WScript.Shell")

WScript.Echo WshShell.CurrentDirectory

Environment

該屬性返回WshEnvironment對象(一個環(huán)境變量集合)。

object.Environment ([strType])

●       object:WshShell對象。

●       strType:可選。指定環(huán)境變量的位置。

Environment屬性包含WshEnvironment對象(一個環(huán)境變量集合)。如果指定了strType,就指定了環(huán)境變量所在的級別的值:

●       System

●       User

●       Volatile

●       Process

如果沒有指定strType,Environment屬性就會根據(jù)不同的操作系統(tǒng)返回不同的環(huán)境變量類型(表15-4所示)。

表15-4

環(huán)境變量類型

操 作 系 統(tǒng)

System

Microsoft Windows NT/2000/XP/Vista

Process

Windows 95/98/Me

對于Windows 95/98/Me,只允許一種strType:Process。其他類型不允許在腳本中使用。

表15-5列出了Windows操作系統(tǒng)提供的一些變量。

表15-5

名    稱

描   述

System

User

Process(NT/2000/XP/Vista)

Process(95/98/Me)

NUMBER_OF

_PROCESSORS

機(jī)器中運(yùn)行的處理器個數(shù)

x

-

X

-

PROCESSOR

_ARCHITECTURE

用戶工作站的處理器類型

x

-

X

-

PROCESSOR

_IDENTIFIER

用戶工作站的處理器ID

x

-

X

-

PROCESSOR

_LEVEL

用戶工作站的處理器等級

x

-

X

-

PROCESSOR

_REVISION

用戶工作站的處理器版本

x

-

X

-

OS

用戶工作站的操作系統(tǒng)

x

-

X

-

COMSPEC

用戶工作站的操作系統(tǒng)

-

-

X

x

HOMEDRIVE

主邏輯驅(qū)動器(通常是C盤)

-

-

X

-

HOMEPATH

用戶的默認(rèn)目錄

-

-

X

-

PATH

Path環(huán)境變量

x

x

X

x

(續(xù)表)  

名    稱

描    述

System

User

Process(NT/2000/XP/Vista)

Process(95/98/Me)

PATHEXT

可執(zhí)行文件的擴(kuò)展名(一般是.com、.exe、.bat或.cmd)

x

-

X

-

PROMPT

命令提示符(一般是$P$G)

-

-

X

x

SYSTEMDRIVE

系統(tǒng)目錄所在驅(qū)動器(一般是c:/)

-

-

X

-

SYSTEMROOT

系統(tǒng)目錄(例如c:/winnt)。與WINDIR相同

-

-

X

-

WINDIR

系統(tǒng)目錄(例如c:/winnt)。與SYSTEMROOT相同

x

-

X

x

TEMP

存儲臨時文件的目錄(例如c:/temp)

-

x

X

x

TMP

存儲臨時文件的目錄(例如c:/temp)

-

x

X

x

要注意的是,腳本有可能訪問其他應(yīng)用程序所設(shè)置的環(huán)境變量,而且上面列出的環(huán)境變量都不能是Volatile類型的。

下面是一個關(guān)于在代碼中如何使用上面列出的這些變量的示例。該示例返回系統(tǒng)中存在的處理器個數(shù)。

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")

WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

SpeciolFolders

該屬性返回一個SpecialFolders對象(一個特殊文件夾集合)。

object.SpecialFolders(objWshSpecialFolders)

●       object:WshShell對象。

●       onjWshSpecialFolders:特殊文件夾的名稱。

WshSpecialFolders對象是一個集合,它包含所有的Windows特殊文件夾,其中包括Desktop文件夾、Start Menu文件夾和Documents/My Documents文件夾(注意,在Windows Vista中去掉了前綴“my”)。

特殊文件夾的名稱用于索引集合以獲取想要的具體 文件夾。如果被請求的文件夾(strFolderName)不可用,SpecialFolder屬性將返回一個空字符串。例如,Windows 95沒有AllUsersDesktop這個文件夾,所有如果strFolderName是AllUsersDesktop的話,就會返回一個空字符串。

下面是可用的特殊文件夾:

●       AllUsersDesktop

●       AllUsersStartMenu

●       AllUsersPrograms

●       AllUsersStartup

●       Desktop

●       Favorites

●       Fonts

●       MyDocuments

●       NetHood

●       PrintHood

●       Programs

●       Recent

●       SendTo

●       StartMenu

●       Startup

●       Templates

下面的代碼用于獲取Start Menu文件夾并在strDeskTop變量中保存路徑以備后面的使用。

strDesktop = WshShell.SpecialFolders("StartMenu")

3. WshShell對象的方法

WshShell對象有11個方法。所有這些方法都與操作系統(tǒng)shell相關(guān),可以用于控制Windows注冊表,也可以創(chuàng)建彈出式消息框和快捷方式以及激活和控制正在運(yùn)行的應(yīng)用程序:

●       AppActivate

●       CreateShortcut

●       ExpandEnvironmentStrings

●       LogEvent

●       Popup

●       RegDelete

●       RegRead

●       RegWrite

●       Run

●       SendKeys

●       Exec

AppActivate

這個方法可以用于激活一個指定的已經(jīng)打開的應(yīng)用程序窗口。

object.AppActivate title

●       object:WshShell對象。

●       title:指定要激活的應(yīng)用程序。這可以是一個包含應(yīng)用程序標(biāo)題的字符串(就像出現(xiàn)在標(biāo)題欄中的那樣)或應(yīng)用程序的進(jìn)程ID。

AppActivate方法返回一個 Boolean類型的值,標(biāo)志著過程調(diào)用是否成功。這個方法用于將焦點切換至指定名稱的應(yīng)用程序或窗口。方法的調(diào)用不影響應(yīng)用程序的最大化或最小化狀態(tài)。當(dāng)進(jìn)行了切換焦點(或關(guān)閉窗口)的動作之后,焦點就會從已經(jīng)獲得焦點的應(yīng)用程序上移走。

為了確定要激活的應(yīng)用程序,指定的標(biāo)題名稱會與 每個正在運(yùn)行的應(yīng)用程序的標(biāo)題字符串做比較。如果沒有準(zhǔn)確的匹配,那么具有以title所指定的值開始的標(biāo)題字符串的應(yīng)用程序就會被激活。如果還是沒有能 找到合適的應(yīng)用程序,那么具有以title所指定的值結(jié)束的標(biāo)題字符串的應(yīng)用程序就會被激活。如果存在多個名為title所指定的值的應(yīng)用程序?qū)嵗蜁我饧せ钇渲械囊粋€。但是,無法控制具體選擇哪一個。

<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 "2"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 500

WshShell.SendKeys "*3"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 2500

</script>

</job>

</package>

CreateShortcut

該方法可以用于創(chuàng)建一個新的快捷方式,或打開一個已有的快捷方式。

object.CreateShortcut(strPathname)

●       object:WshShell對象。

●       strPathname:一個表示要創(chuàng)建的快捷方式的路徑名。

CreateShortcut方法返回一個 WshShortcut對象或一個WshURLShortcut對象。調(diào)用CreateShortcut方法不會導(dǎo)致快捷方式的真正創(chuàng)建,而是將快捷方式 對象以及對其所做的修改保存在內(nèi)存中,直到使用Save方法將其保存至磁盤。要真正創(chuàng)建一個快捷方式,必須完成下列三個步驟:

●       創(chuàng)建WshShortcut對象的一個實例。

●       初始化其屬性。

●       使用Save方法將其保存到磁盤。

容易出問題的是將參數(shù)放到快捷方式對象的TargetPath屬性中,這通常是無用的??旖莘绞降乃袇?shù)都必須放在Arguments屬性中。

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut to Notepad"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

</script>

</job>

</package>

ExpandEnvironmentStrings

該方法返回環(huán)境變量的擴(kuò)充值。

object.ExpandEnvironmentStrings(strString)

●       object:WshShell對象。

●       strString:一個字符串值,表示想要擴(kuò)充的環(huán)境變量的名稱。

這個方法只對PROCESS環(huán)境空間內(nèi)定義的環(huán)境變量進(jìn)行擴(kuò)充。環(huán)境變量的名稱必須以“%”包圍,并且是大小寫不敏感的。

set WshShell = WScript.CreateObject("WScript.Shell")

WScript.Echo "The path to WinDir is " _

& WshShell.ExpandEnvironmentStrings("%WinDir%")

LogEvent

LogEvent方法向日志文件中添加一個事件條目。

object.LogEvent(intType, strMessage [,strTarget])

●       object:WshShell對象。

●       intType:表示事件類型的整數(shù)值。

●       strMessage:包含日志條目文本的字符串值。

●       strTarget:可選。一個字符串值,表示事件日志所存儲的計算機(jī)系統(tǒng)名稱(默認(rèn)的是本地計算機(jī)系統(tǒng))。只適用于Windows NT/2000/XP/Vista。

這個方法用于返回一個Boolean值(如果事 件被成功記錄,就返回True,否則返回False)。在Windows NT/2000/XP/Vista中,事件被記錄在Windows NT Event Log中。在Windows 9x/Me中,事件被記錄在WSH.log(位于Windows目錄)中。

有6種事件類型,如表15-6所示。

表15-6

類    型

0

SUCCESS

1

ERROR

2

WARNING

4

INFORMATION

8

AUDIT_SUCCESS

16

AUDIT_FAILURE

下面的代碼顯示了LogEvent的運(yùn)行,它基于事件的成功與否對其進(jìn)行記錄。

Set WshShell = WScript.CreateObject("WScript.Shell")

'assume that rS contains a return code

'from another part of the code

if rS then

WshShell.LogEvent 0, "Script Completed Successfully"

else

WshShell.LogEvent 1, "Script failed"

end if

Popup

該方法用于在彈出式消息框中顯示文本。

intButton = object.Popup(strText,[nSecondsToWait],[strTitle],[nType])

●       object:WshShell對象。

●       strText:一個字符串值,包含了想要顯示在彈出式消息框中的文本。

●       nSecondsToWait:可選。一個數(shù)值,表示想要彈出式消息框顯示的最長時間(以秒為單位)。如果nSecondToWait等于0(默認(rèn)值), 彈出式消息框就一直可見,直到被關(guān)閉。如果nSecondToWait大于0,那么彈出式消息框就在nSecondToWait秒后關(guān)閉。

●       strTitle:可選。一個字符串值,包含了想要出現(xiàn)在彈出式消息框標(biāo)題欄中的文本。如果沒有提供strTitle這個參數(shù),彈出式消息框的標(biāo)題就會被設(shè)置為默認(rèn)的字符串“Windows Script Host”。

●       nType:可選。一個數(shù)值,表示想在彈出式消息框中出現(xiàn)的按鈕和圖標(biāo)的類型。這些決定了消息框的使用場合和用途。nType的功能與Microsoft Win32應(yīng)用程序編程接口中的MessageBox函數(shù)相同。下面的表格顯示了各種值和它們的含義。可以合并列表中不同的值獲得各種不同的結(jié)果。

●       IntButton:一個整數(shù)值,表示關(guān)閉消息框時單擊的按鈕的序號,這個值是由Popup方法返回的。

無論使用那種宿主可執(zhí)行文件(wscript.exe或cscript.exe)運(yùn)行腳本,都可以使用Popup方法顯示一個消息框。

要以諸如HeBrew或Arabic這樣的RTL語言的格式(從右至左)正確顯示文本,可以在nType參數(shù)之前加上h00100000(十進(jìn)制的1048576)。

按鈕類型

見表15-7。

表15-7

描    述

0

顯示OK按鈕

1

顯示OK和Cancel按鈕

2

顯示Abort、Retry和Ignore按鈕

3

顯示Yes、No和Cancel按鈕

4

顯示Yes和No按鈕

5

顯示Retry和Cancel按鈕

圖標(biāo)類型

見表15-8。

表15-8

描    述

16

顯示終止(Stop Mark)圖標(biāo)

32

顯示問號(Question Mark)圖標(biāo)

48

顯示嘆號(Exclamation Mark)圖標(biāo)

64

顯示提示信息(Information Mark)圖標(biāo)

IntButton的返回值代表已單擊的按鈕編號。如果在nSecondsToWait秒之前沒有單擊任何按鈕,inButton就被設(shè)置為-1.

表15-9列出了關(guān)閉消息框時所單擊的按鈕的編號。

表15-9

描    述

1

OK按鈕

2

Cancel按鈕

3

Abort按鈕

4

Retry按鈕

5

Ignore按鈕

6

Yes按鈕

7

No按鈕

下面的代碼顯示了各種消息框按鈕和圖標(biāo)的使用:

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

該方法從注冊表中刪除一個鍵或其鍵值。

object.RegDelete(strName)

●       object:WshShell對象。

●       strName:一個字符串值,表示要刪除的注冊表鍵或鍵值的名稱。

如果strName以反斜杠結(jié)尾,就可以指定鍵名,如果不使用反斜杠,就可以指定鍵值名。

完整的有效鍵名和鍵值名是以一個根鍵的名稱作為前綴的。使用RegDelete方法時,也可以使用根鍵名的縮寫形式。

表15-10列出了5種可能使用的根鍵。

表15-10

根  鍵  名

縮    寫

HKEY_CURRENT_USER

HKCU

HKEY_LOCAL_MACHINE

HKLM

HKEY_CLASSES_ROOT

HKCR

HKEY_USERS

HKEY_USERS

HKEY_CURRENT_CONFIG

HKEY_CURRENT_CONFIG

下面的腳本將創(chuàng)建、讀取并刪除Windows注冊表鍵。高亮的部分是刪除鍵的腳本。

Dim WshShell, bKey

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU/Software/WROX/VBScript/", 1, "REG_BINARY"

WshShell.RegWrite "HKCU/Software/WROX/VBScript/ProgRef","VBS_is_great","REG_SZ"

bKey = WshShell.RegRead("HKCU/Software/WROX/VBScript/")

WScript.Echo WshShell.RegRead("HKCU/Software/WROX/VBScript/ProgRef")

WshShell.RegDelete "HKCU/Software/WROX/VBScript/ProgRef"

WshShell.RegDelete "HKCU/Software/WROX/VBScript/"

WshShell.RegDelete "HKCU/Software/WROX/"

在修改注冊表設(shè)置時,需要特別的小心。對注冊表進(jìn)行不當(dāng)?shù)男薷目赡軙?dǎo)致系統(tǒng)變得不穩(wěn)定,甚至使其變得完全不可用。如果不了解注冊表的內(nèi)部工作機(jī)制,那么強(qiáng)烈建議在實際操作之前就此問題閱讀一些相關(guān)的資料。

RegRead

該方法返回注冊表中一個鍵或鍵值的名稱。

object.RegRead(strName)

●       object:WshShell對象。

●       strName:一個字符串值,表示想獲得的鍵或鍵值的名稱。

RegRead方法返回的值有5種類型(如表15-11所示)。

表15-11

類    型

描    述

形    式

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

如果strName以反斜杠結(jié)尾,就可以指定鍵名,如果不使用反斜杠,就可以指定鍵值名。

一個鍵值包含三部分:

●       名稱(Name)

●       數(shù)據(jù)類型(Data Type)

●       值(Value)

如果指定了鍵名(相對于鍵值名來說),RegRead就會返回默認(rèn)的值。所以要讀取一個鍵的默認(rèn)值,只要指定鍵的名稱即可。

完整的有效鍵名和鍵值名是以一個根鍵的名稱作為起始的。使用RegRead方法時,也可以使用根鍵名的縮寫形式。表15-12列出了5種可能使用的根鍵。

表15-12

根  鍵  名

縮    寫

HKEY_CURRENT_USER

HKCU

HKEY_LOCAL_MACHINE

HKLM

HKEY_CLASSES_ROOT

HKCR

HKEY_USERS

HKEY_USERS

HKEY_CURRENT_CONFIG

HKEY_CURRENT_CONFIG

下面的腳本將創(chuàng)建、讀取并刪除Windows注冊表鍵。高亮的部分是讀取鍵的腳本。

Dim WshShell, bKey

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU/Software/WROX/VBScript/", 1, "REG_BINARY"

WshShell.RegWrite "HKCU/Software/WROX/VBScript/ProgRef","VBS_is_great","REG_SZ"

bKey = WshShell.RegRead("HKCU/Software/WROX/VBScript/")

WScript.Echo WshShell.RegRead("HKCU/Software/WROX/VBScript/ProgRef")

WshShell.RegDelete "HKCU/Software/WROX/VBScript/ProgRef"

WshShell.RegDelete "HKCU/Software/WROX/VBScript/"

WshShell.RegDelete "HKCU/Software/WROX/"

RegWrtie

該方法可以創(chuàng)建一個新鍵,給現(xiàn)有鍵添加另一個鍵值名(并指定一個值),或修改現(xiàn)有鍵值名的值。

object.RegWrite(strName, anyValue [,strType])

●       object:WshShell對象。

●       strName:一個字符串值,表示想創(chuàng)建、添加或修改的鍵名、鍵值名或鍵值。

●       anyValue:想要創(chuàng)建的新鍵的名稱,或想添加到現(xiàn)有鍵的鍵值名,或想指定給某個現(xiàn)有鍵值名的新鍵值。

●       strType:可選。一個表示鍵值數(shù)據(jù)類型的字符串。

如果strName以反斜杠結(jié)尾,就可以指定鍵名,如果不使用反斜杠,就可以指定鍵值名。

RegWrite方法自動將參數(shù)anyValue轉(zhuǎn)換成一個字符串或一個整數(shù),而由strType的值決定其數(shù)據(jù)類型(是字符串還是整數(shù))。表15-13列出了strType方法的可用選項。

表15-13

轉(zhuǎn)換至

strType

字符串

REG_SZ

字符串

REG_EXPAND_SZ

整數(shù)

REG_DWORD

整數(shù)

REG_BINARY

RegWrite方法不支持REG_MULTI_SZ類型。

RegWrite最多寫入一個DWORD或REG_BINARY值,該方法不支持更大的值。完整的有效鍵名和鍵值名是以一個根鍵的名稱作為起始的。使用RegWrite方法時,也可以使用根鍵名的縮寫形式。表15-14列出了5種可能使用的根鍵。

表15-14

根  鍵  名

縮    寫

HKEY_CURRENT_USER

HKCU

HKEY_LOCAL_MACHINE

HKLM

HKEY_CLASSES_ROOT

HKCR

HKEY_USERS

HKEY_USERS

HKEY_CURRENT_CONFIG

HKEY_CURRENT_CONFIG

strType的四種可能被指定的數(shù)據(jù)類型如表15-15所示。

表15-15

類    型

描    述

形    式

REG_SZ

字符串

字符串

REG_DWORD

數(shù)字

整數(shù)

REG_BINARY

二進(jìn)制值

整數(shù)構(gòu)成的VBArray

REG_EXPAND _ SZ

可擴(kuò)充字符串(例如%windir%//notepad.exe)

字符串

下面的代碼顯示了如何訪問和修改Windows注冊表:

Dim WshShell, bKey

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite "HKCU/Software/WROX/VBScript/", 1, "REG_BINARY"

WshShell.RegWrite "HKCU/Software/WROX/VBScript/ProgRef","VBS_is_great","REG_SZ"

bKey = WshShell.RegRead("HKCU/Software/WROX/VBScript/")

WScript.Echo WshShell.RegRead("HKCU/Software/WROX/VBScript/ProgRef")

WshShell.RegDelete "HKCU/Software/WROX/VBScript/ProgRef"

WshShell.RegDelete "HKCU/Software/WROX/VBScript/"

WshShell.RegDelete "HKCU/Software/WROX/"

在修改注冊表設(shè)置時,需要特別的小心。對注冊表進(jìn)行不當(dāng)?shù)男薷目赡軙?dǎo)致系統(tǒng)變得不穩(wěn)定,甚至使其變得完全不可用。如果不了解注冊表的內(nèi)部工作機(jī)制,那么強(qiáng)烈建議在實際操作之前就此問題閱讀一些相關(guān)的資料。

Run

Run方法在一個新進(jìn)程中運(yùn)行一個程序。

object.Run(strCommand, [intWindowStyle], [bWaitOnReturn])

●       object:WshShell對象。

●       strCommand:一個字符串,表示想要運(yùn)行的命令行,必須包含所有要傳遞給可執(zhí)行文件的參數(shù)。

●       intWindowStyle:可選。一個整數(shù)值,表示程序窗口的外觀。并不是所有的程序都使用這一信息。

●       bWaitOnReturn:可選。一個Boolean值,表示腳本在其下一條語句之前是否需要等待程序結(jié)束。如果設(shè)置為 True,腳本一直停止執(zhí)行直到程序結(jié)束,Run返回任一個由程序返回的錯誤代碼。如果設(shè)置為False(默認(rèn)),程序啟動后,Run方法立即返回0(這 不是錯誤代碼)。

Run方法返回一個整數(shù)。該方法使用一個新的 Windows進(jìn)程啟動運(yùn)行一個程序??梢宰屇_本等待程序運(yùn)行完畢再繼續(xù)執(zhí)行,這樣就可以是腳本和程序同步執(zhí)行。如果將某個文件類型成功注冊到某一個特定程序,那么對該文件調(diào)用Run方法就會啟動注冊的程序。例如,對一個*.txt文件調(diào)用Run方法,就會啟動記事本程序并將文本文件加載到其中。表 15-16列出了intWindowStyle的可用值。

表15-16

IntWindowStyle

描    述

0

隱藏當(dāng)前窗口并激活另一個窗口

1

激活并顯示一個窗口

如果該窗口處于最小化或最大化狀態(tài),系統(tǒng)將恢復(fù)其原始尺寸

如果是初次顯示該窗口,應(yīng)用程序就應(yīng)該指定這個標(biāo)志

2

激活并以最小化狀態(tài)顯示窗口

3

激活并以最大化狀態(tài)顯示窗口

4

以其最近位置和尺寸顯示一個窗口

活躍的窗口將繼續(xù)保持活躍

5

以其當(dāng)前位置和尺寸顯示一個窗口

6

最小化指定的窗口并將其激活為Z序列中僅次于頂層的窗口

7

以最小化形式顯示窗口

活躍的窗口將繼續(xù)保持活躍

8

以其當(dāng)前狀態(tài)顯示窗口

活躍的窗口將繼續(xù)保持活躍

9

激活并顯示窗口

如果該窗口處于最小化或最大化狀態(tài),系統(tǒng)將恢復(fù)其原始尺寸

如果要恢復(fù)一個最小化窗口,應(yīng)用程序就應(yīng)該指定這個標(biāo)志

10

根據(jù)啟動應(yīng)用程序的程序狀態(tài)設(shè)置窗口顯示的狀態(tài)

下面的代碼打開一個命令提示符窗口并顯示驅(qū)動器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)

●       object:WshShell對象。

●       string:一個字符串值,表示想要發(fā)送的擊鍵。

使用SendKeys方法可以向沒有內(nèi)建的自動化接口的應(yīng)用程序發(fā)送擊鍵。多數(shù)鍵盤字符可由單個擊鍵表示,但有些鍵盤字符是由擊鍵的組合構(gòu)成的(例如Alt+F4)。

要發(fā)送一個單獨的鍵盤字符,只要將該字符本身作為字符串參數(shù)發(fā)送即可。例如,要發(fā)送字母“v”。要發(fā)送一個空格,可以發(fā)送“ ”。

也可以使用SendKeys方法發(fā)送多次擊鍵??梢砸来渭尤朊看螕翩I,形成一個序列,創(chuàng)建一個復(fù)合的字符串參數(shù)來表示擊鍵的序列。例如,要發(fā)送擊鍵x、y和z,可以發(fā)送字符串參數(shù)“xyz”

SendKeys方法使用某些字符作為其他字符的限定符。這些特殊的字符包括圓括弧、尖括弧、花括弧,以及表15-17中列出的一些字符。

表15-17

加號

+

上尖角

^

百分號

%

波浪號

~

要發(fā)送這些字符,可以將它們包含在一對花括弧“{}”中間。所以如果要發(fā)送加號,可以發(fā)送字符串參數(shù)“{+}”。

在SendKeys中使用方括弧“[]”時,沒有什么特殊含義,但為了滿足那些為它們指定了特殊含義的應(yīng)用程序(例如Dynamic Data Exchange)的需要,仍需要將它們包含在花括弧中。

要發(fā)送方括弧字符,可以使用字符串?dāng)?shù)組“{[}”發(fā)送左括弧,使用字符串?dāng)?shù)組“{]}”發(fā)送右括弧。要發(fā)送花括弧字符,可以發(fā)送字符串參數(shù)“{{}”發(fā)送左括弧,發(fā)送字符串“{}}”發(fā)送右括弧。

某些擊鍵不產(chǎn)生任何字符(如Enter和Tab),某些擊鍵代表一些動作(如Backspace和Break)。要發(fā)送這些擊鍵,可以發(fā)送表15-18中列出的這些字符串參數(shù)。

表15-18

Backspace

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

Break

{BREAK}

(續(xù)表)  

Caps Lock

{CAPSLOCK}

Del or Delete

{DELETE} or {DEL}

Down Arrow

{DOWN}

End

{END}

Enter

{ENTER} or ~

Esc

{ESC}

Help

{HELP}

Home

{HOME}

Ins or Insert

{INSERT} or {INS}

Left Arrow

{LEFT}

Num Lock

{NUMLOCK}

Page Down

{PGDN}

Page Up

{PGUP}

Print Screen

{PRTSC}

Right Arrow

{RIGHT}

Scroll Lock

{SCROLLLOCK}

Tab

{TAB}

Up Arrow

{UP}

F1

{F1}

F2

{F2}

F3

{F3}

F4

{F4}

F5

{F5}

F6

{F6}

F7

{F7}

F8

{F8}

F9

{F9}

F10

{F10}

F11

{F11}

F12

{F12}

F13

{F13}

F14

{F14}

F15

{F15}

F16

{F16}

要發(fā)送常規(guī)字符與Shift、Ctrl或Alt鍵的組合,就需要創(chuàng)建一個復(fù)合的字符串參數(shù)以表示這種擊鍵組合??梢栽诔R?guī)擊鍵之前加上表15-19中的一個或多個特殊字符。

表15-19

特 殊 字 符

Alt

%

Ctrl

^

Shift

+

當(dāng)用做這種用途時,這些特殊字符不需要被包含在花括弧中。

要表示按下其他某些鍵的同時,必須按下Shift、Ctrl或Alt鍵的情況,可以修改圓括弧中包含的擊鍵序列創(chuàng)建一個復(fù)合的字符串參數(shù)。例如下面這些擊鍵以及相應(yīng)的操作:

●       按下Shift的同時按下V和B,發(fā)送字符串參數(shù)“+(VB)”。

●       按下Shift的同時按下V,然后長按B(不要按下Shift),發(fā)送字符串參數(shù)“+VB”。

可以使用SendKeys方法發(fā)送一個單獨的擊 鍵被按下若干次所構(gòu)成的擊鍵模式。可以創(chuàng)建一個復(fù)合的字符串參數(shù),指定想要重復(fù)的擊鍵,后面再跟上想要重復(fù)的次數(shù)。使用的復(fù)合字符串參數(shù)形如{擊鍵 次數(shù)}。例如,要發(fā)送“V”被按下10次的擊鍵模式,可以發(fā)送字符串參數(shù)“{V 10}”。

單個擊鍵被按下若干次的模式是唯一的一種能夠發(fā)送的擊鍵模式。例如,可以發(fā)送10次“V”,但不能發(fā)送10次“Ctrl+V”。注意,不能向應(yīng)用程序發(fā)送Print Screen鍵{PRTSC}。

<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 "2"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 500

WshShell.SendKeys "*9"

WScript.Sleep 500

WshShell.SendKeys "~"

WScript.Sleep 2500

</script>

</job>

</package>

Exec

Exec方法在一個子命令解釋器中運(yùn)行一個應(yīng)用程序,子命令解釋器提供對StdIn、StdOut和StdErr流的訪問。

object.Exec(strCommand)

●       object:WshShell對象。

●       strCommand:一個字符串值,表示用于運(yùn)行腳本的命令行。

Exec方法返回一個WshScriptExec對象,該對象提供使用Exec運(yùn)行的腳本的狀態(tài)和錯誤信息,也提供對StdIn、StdOut和StdErr通道的訪問。Exec方法只能執(zhí)行命令行應(yīng)用程序,并且不能用于運(yùn)行遠(yuǎn)程腳本。

15.6.4  WshNamed對象

WshNamed對象提供從命令行中對有名稱參數(shù)的訪問。

WshArguments對象的Named屬性返回WshNamed對象,這是一個有名稱參數(shù)的集合。這個集合使用了參數(shù)名稱作為索引來獲取每個參數(shù)的值。訪問命令行參數(shù)集合有下列三種方法:

●       使用WshAruments對象訪問整個參數(shù)集合。

●       使用WshNamed對象訪問有名字的參數(shù)。

●       使用WshUnnamed對象訪問沒有名字的參數(shù)。

1. 訪問WshNamed對象

該對象的訪問是通過創(chuàng)建WScript.Named對象的實例實現(xiàn)的。

Set argsNamed = WScript.Arguments.Named

2. WshNamed對象的屬性

WshNamed對象具有兩個屬性:

●       Item

●       Length

Item

Item屬性提供了對WshNamed對象中的項目的訪問。

Object.Item(key)

●       object:WshNamed對象。

●       key:想要獲取的項目名稱。

Item屬性返回一個字符串。對于集合來說,它根據(jù)給定的關(guān)鍵字返回一個項目。在命令行中輸入?yún)?shù)時,可以在字符串中使用空格,只要將其包含在引號中即可。下面這行代碼可以用于在命令提示符下運(yùn)行腳本:

sample.vbs /a:arg1 /b:arg2

如果腳本中包含下面的代碼。

WScript.Echo WScript.Arguments.Named.Item("b")

WScript.Echo WScript.Arguments.Named.Item("a")

就會產(chǎn)生這樣的輸出結(jié)果。

arg2

arg1

Length

Length屬性是一個只讀的整數(shù),可以在編寫Jscript腳本時使用。同樣地,這個屬性不在本書的討論范圍之內(nèi)。

3. WshNamed對象的方法

WshNamed對象具有兩個方法:

●       Count

●       Exists

Count

Count方法返回WshNamed或WshUnnamed對象的選項開關(guān)個數(shù)。

object.Count

●       object:WshNamed對象。

Count方法用于返回一個整數(shù)值。該方法是給VBScript用戶使用的,JScript用戶應(yīng)該使用length屬性。

For x = 0 to WScript.Arguments.Count-1

WScript.Echo WScript.Arguments.Named(x)

Next x

Exists

Exists方法可以用于確定某一給定的鍵值是否存在于WshNamed對象中。

object.Exists(key)

●       object:WshNamed對象。

●       key:字符串值,表示W(wǎng)shNamed對象的一個參數(shù)。

這個方法返回一個Boolean值。如果請求的參數(shù)的確在命令行中被指定,就返回True(否則返回False)。在命令提示符中輸入下面的代碼運(yùn)行腳本:

sample.vbs /a:arg1 /b:arg2

下面的代碼可以用于確定是否使用了參數(shù)/a、/b和/c:

WScript.Echo WScript.Arguments.Named.Exists("a")

WScript.Echo WScript.Arguments.Named.Exists("b")

WScript.Echo WScript.Arguments.Named.Exists("c")

15.6.5  WshUnnamed對象

WshUnnamed對象提供了從命令行中對未命名對象的訪問。它是一個由WshAruments對象的Unnamed屬性返回的只讀集合。從該集合中獲取單個參數(shù)值時,使用由0開始的索引。

訪問命令行參數(shù)集合有下列三種方法:

●       使用WshAruments對象訪問整個參數(shù)集合。

●       使用WshNamed對象訪問有名字的參數(shù)。

●       使用WshUnnamed對象訪問沒有名字的參數(shù)。

1. 訪問WshUnnamed對象

該對象的訪問是通過創(chuàng)建WScript.Arguments.Unnamed對象的實例實現(xiàn)的。

Set argsUnnamed = WScript.Arguments.Unnamed

2. WshUnnamed對象的屬性

WshUnnamed對象具有兩個屬性:

●       Item

●       Length

這兩個屬性和WshNamed的類似,這里就不再重復(fù)介紹。

3. WshUnnamed對象的方法

WshUnnamed對象具有一個方法:

●       Count

這個方法和WshNamed的類似,這里就不再重復(fù)介紹。

15.6.6  WshNetwork對象

WshNetwork對象提供對計算機(jī)所連接的網(wǎng)絡(luò)上共享資源的訪問。如果想連接到網(wǎng)絡(luò)共享或網(wǎng)絡(luò)打印機(jī),從網(wǎng)絡(luò)共享或網(wǎng)絡(luò)打印機(jī)斷開連接,映射或刪除網(wǎng)絡(luò)共享,或訪問網(wǎng)絡(luò)上某一用戶的信息,都需要創(chuàng)建一個WshNetwork對象。

1. 訪問WshNetwork對象

該對象的訪問是通過創(chuàng)建WScript.Network對象的實例實現(xiàn)的。

Set WshNetwork = WScript.CreateObject("WScript.Network")

2. WshNetwork對象的屬性

WshNetwork對象具有三個屬性:

●       ComputerName

●       UserDomain

●       UserName

ComputerName

ComputerName屬性返回計算機(jī)系統(tǒng)的名稱。

object.ComputerName

●       object:WshNetwork對象。

ComputerName屬性包含一個字符串值,表示計算機(jī)系統(tǒng)的名稱。

<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>

UserDomain

UserDomain屬性返回用戶的域名。

object.UserDomain

●       object:WshNetwork對象。

UserDomain屬性在Windows 98和Windows Me下不可用,除非設(shè)置了USERDOMAIN環(huán)境變量。這個變量默認(rèn)情況下是沒有被設(shè)置的。

<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>

UserName

UserName屬性返回某個用戶的名稱。

object.UserName

●       object:WshNetwork對象。

UserName屬性以字符串返回一個用戶的名稱。

<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的方法

WshNetwork對象有下列8個方法可用:

●       AddWindowsPrinterConnection

●       AddPrinterConnection

●       EnumNetworkDrives

●       EnumPrinterConnection

●       MapNetworkDrive

●       RemoveNetworkDrive

●       RemovePrinterConnection

●       SetDefaultPrinter

AddWindowsPrinterConnection

AddWindowsPrinterConnection方法在計算機(jī)系統(tǒng)中添加一個Windows打印機(jī)連接。

●       Windows NT/2000/XP/Vista:

object.AddWindowsPrinterConnection(

strPrinterPath

)

●       Windows 9x/Me:

object.AddWindowsPrinterConnection(

strPrinterPath,

strDriverName[,strPort]

)

· object:WshNetwork對象。

· strPrinterPath:一個字符串值,表示打印機(jī)連接的路徑。

· strDriverName:一個字符串值,表示驅(qū)動器的名稱(在Windows NT/2000/XP中忽略此參數(shù))。

· strPort:可選。一個字符串值,為打印機(jī)連接指定一個打印機(jī)端口(在Windows NT/2000/XP系統(tǒng)中忽略此參數(shù))。

●       使用這個方法添加一個打印機(jī)連接和使用控制面板中的Printer選項是非常類似的。這個方法允許創(chuàng)建一個打印機(jī)連接,并且能夠很方便地將其定向到某一特定端口。

●       如果連接失敗,就會產(chǎn)生一個錯誤。

Set WshNetwork = WScript.CreateObject("WScript.Network")

PrinterPath = "http://printerserver/DefaultPrinter"

WshNetwork.AddWindowsPrinterConnection PrinterPath

AddPrinterConnection

AddPrinterConnection方法在計算機(jī)系統(tǒng)中添加一個遠(yuǎn)程打印機(jī)連接。

object.AddPrinterConnection(strLocalName,

strRemoteName[,bUpdateProfile][,strUser][,strPassword])

●       object:WshNetwork。

●       strLocalName:一個字符串值,表示指派給以連接打印機(jī)的本地名稱。

●       strRemoteName:一個字符串值,表示遠(yuǎn)程打印機(jī)的名稱。

●       bUpdateProfile:可選。一個Boolean值,表示打印機(jī)映射是否被存儲到當(dāng)前用戶的參數(shù)文件中。如果提供了bUpdateProfile參數(shù)并且值為True,打印機(jī)映射就會被存儲到用戶參數(shù)文件中。默認(rèn)值為False。

●       strUser:可選。一個字符串值,表示用戶名。如果使用某個其他用戶,而非當(dāng)前用戶的參數(shù)文件映射一個遠(yuǎn)程的打印機(jī),就可以指定strUser和strPassword。

●       strPassword:可選。一個字符串值,表示用戶的密碼。如果使用某個其他用戶,而非當(dāng)前用戶的參數(shù)文件映射一個遠(yuǎn)程的打印機(jī),就可以指定strUser和strPassword。

EnumNetworkDrives

EnumNetworkDrives方法返回當(dāng)前網(wǎng)絡(luò)驅(qū)動器的映射信息。

objDrives = object.EnumNetworkDrives

●       object:WshNetwork對象。

●       objDrives:一個變量,保存網(wǎng)絡(luò)驅(qū)動器的映射信息。

這個方法返回一個集合,它是一個由關(guān)聯(lián)項目對(網(wǎng)絡(luò)驅(qū)動器本地名稱與其關(guān)聯(lián)的UNC(Universal Naming Convention,通用命名規(guī)范)名稱)構(gòu)成的數(shù)組。集合中的偶數(shù)元素表示邏輯驅(qū)動器的本地名稱,而奇數(shù)元素表示其關(guān)聯(lián)的UNC共享名。

集合中的第一個元素的索引是0。

EnumPrinterConnection

EnumPrinterConnection方法返回當(dāng)前網(wǎng)絡(luò)打印機(jī)的映射信息。

objPrinters = object.EnumPrinterConnections

●       object:WshNetwork對象。

●       objPrinters:保存網(wǎng)絡(luò)打印機(jī)的映射信息的變量。

EnumPrinterConnection方法返回一個集合,它是一個由關(guān)聯(lián)項目對(網(wǎng)絡(luò)打印機(jī)本地名稱與其關(guān)聯(lián)的UNC(Universal Naming Convention,通用命名規(guī)范)名稱)構(gòu)成的數(shù)組。集合中的偶數(shù)元素表示打印機(jī)端口,而奇數(shù)元素表示網(wǎng)絡(luò)打印機(jī)的UNC名稱。

集合中的第一個元素的索引是0。

MapNetworkDrive

MapNetworkDrive方法在計算機(jī)系統(tǒng)中添加一個共享網(wǎng)絡(luò)驅(qū)動器。

object.MapNetworkDrive(strLocalName, strRemoteName, [bUpdateProfile],

[strUser], [strPassword])

●       object:WshNetwork對象。

●       strLocalName:一個字符串值,表示被映射驅(qū)動器在本地的名稱。

●       strRemoteName:一個字符串值,表示共享的UNC名稱(//xxx/yyy)。

●       bUpdateProfile:可選。一個Boolean值,表示映射信息是否被存儲到當(dāng)前用戶的參數(shù)文件中。如果提供了bUpdateProfile參數(shù)并且值為True,映射信息就會被存儲到用戶參數(shù)文件中。默認(rèn)值為False。

●       strUser:可選。一個字符串值,表示用戶名。如果使用某個其他用戶,而非當(dāng)前用戶的憑證映射一個網(wǎng)絡(luò)驅(qū)動器,就必須指定這個參數(shù)。

●       strPassword:可選。一個字符串值,表示用戶的密碼。如果使用某個其他用戶,而非當(dāng)前用戶的憑證映射一個網(wǎng)絡(luò)驅(qū)動器,就必須指定這個參數(shù)。

如果試圖映射一個非共享的網(wǎng)絡(luò)驅(qū)動器,就會導(dǎo)致一個錯誤。

RemoveNetworkDrive

RemoveNetworkDrive方法在計算機(jī)系統(tǒng)中刪除一個共享的網(wǎng)絡(luò)驅(qū)動器。

object.RemoveNetworkDrive(strName, [bForce], [bUpdateProfile])

●       object:WshNetwork對象。

●       strName:一個字符串值,表示想要刪除的已映射驅(qū)動器名稱。strName參數(shù)既可以是一個本地名稱,也可以是遠(yuǎn)程名稱,這取決對于驅(qū)動器映射的方式。

●       bForce:可選。一個Boolean值,表示是否強(qiáng)制刪除已映射的驅(qū)動器。如果指定了bForce參數(shù)并且其值為True,那么無論資源是否正在被使用,該方法都會刪除連接。

●       bUpdateProfile:可選。一個Boolean值,表示是否從用戶參數(shù)文件中刪除映射信息。如果指定了bUpdateProfile參數(shù)并且其值為True,就會從用戶參數(shù)文件中刪除映射信息。bUpdateProfile默認(rèn)值為False。

如果某驅(qū)動器存在從本地名稱(驅(qū)動器字母)到遠(yuǎn)程名稱(UNC名稱)的映射,strName就必須被設(shè)置為本地名。如果網(wǎng)絡(luò)路徑?jīng)]有本地名稱映射,strName就必須被設(shè)置為遠(yuǎn)程名稱。下面的腳本刪除網(wǎng)絡(luò)驅(qū)動器“G:”。

Dim WshNetwork

Set WshNetwork = WScript.CreateObject("WScript.Network")

WshNetwork.RemoveNetworkDrive "G:"

RemovePrinterConnection

RemovePrinterConnection方法在計算機(jī)系統(tǒng)中刪除一個共享的網(wǎng)絡(luò)打印機(jī)連接。

object.RemovePrinterConnection(strName, [bForce], [bUpdateProfile])

●       object:WshNetwork對象。

●       strName:一個字符串值,表示打印機(jī)的標(biāo)識名稱。它可以是一個UNC名稱(格式為//xxx/yyy)或者一個本地名稱(如LPT1)。

●       bForce:可選。一個Boolean值,表示是否強(qiáng)制刪除已映射的打印機(jī)。如果指定了bForce參數(shù)并且其值為True,那么無論是否有用戶正在連接,該方法都會刪除打印機(jī)連接。

●       bUpdateProfile:可選。一個Boolean值,如果設(shè)置為True(默認(rèn)是False),所做的更改保存到用戶參數(shù)文件中。

RemovePrinterConnection方法將同時刪除基于Windows和基于DOS的打印機(jī)連接。

如果打印機(jī)是使用AddPrinterConnection方法連接的,strName就必須是打印機(jī)的本地名稱。

如果打印機(jī)是使用AddWindowsPrinterConnection方法或手工連接的,strName就必須是打印機(jī)的UNC名稱。

SetDefaultPrinter

SetDefaultPrinter方法將某個遠(yuǎn)程打印機(jī)指定為默認(rèn)打印機(jī)。

object.SetDefaultPrinter(strPrinterName)

●       object:WshNetwork對象。

●       strPrinterName:一個字符串值,表示遠(yuǎn)程打印機(jī)的UNC名稱。

使用基于DOS的打印機(jī)連接時,SetDefaultPrinter方法調(diào)用將失敗。此外,也不能使用SetDefaultPrinter方法確定當(dāng)前已安裝的默認(rèn)打印機(jī)名稱。

15.6.7  WshEnvironment對象

WshEnvironment對象提供對Windows環(huán)境變量集合的訪問。

這個對象是一個由WshShell對象的Environment屬性返回的環(huán)境變量集合。該集合包含全部的環(huán)境變量(包括有名稱的和沒有名稱的)。

要獲取集合中某個具體的環(huán)境變量(及其值),可以使用環(huán)境變量名作為索引。

1. 訪問WshEnvironment對象

該對象的訪問是通過創(chuàng)建WScript.Environment對象的實例實現(xiàn)的。下面的腳本返回運(yùn)行腳本的系統(tǒng)中安裝的處理器個數(shù):

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSysEnv = WshShell.Environment("SYSTEM")

WScript.Echo WshSysEnv("NUMBER_OF_PROCESSORS")

2. WshEnvironment對象的屬性

WshEnvironment對象具有兩個屬性:

●       Item

●       Length

Item

Item屬性公開集合中的某一指定元素。

Object.Item(natIndex)

●       object:EnumNetworkDrive或numPrinterConnections方法的返回值,或由Environment或SpecialFolders屬性返回的對象。

●       natIndex:設(shè)置要獲取的元素。

Item是每個集合的默認(rèn)屬性。對于EnumNetworkDrive和EnumPrinterConnections集合來說,索引是一個整數(shù),但對于Environment和SpecialFolders來說,索引是一個字符串。

在VBScript中,如果請求的文件夾(strFolderName)不存在,WshShell.SpecialFolders.Item (strFolderName)將返回“Empty”。

<package>

<job id="vbs">

<script language="VBScript">

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSpecialFolders = WshShell.SpecialFolders

For x = 0 To WshSpecialFolders.Count - 1

WScript.Echo WshSpecialFolders.Item(x)

Next

</script>

</job>

</package>

Length

Length屬性是一個只讀的整數(shù),可以在編寫Jscript腳本時使用。同樣地,這個屬性不在本書的討論范圍之內(nèi)。

3. WshEnvironment對象的方法

WshEnvironment對象具有兩個方法:

●       Count

●       Remove

Count

Count方法返回一個Long值,表示集合中元素的個數(shù)。

object.Count

●       object:Arguments對象

Count方法返回一個整數(shù)值。該方法是給VBScript用戶使用的,JScript用戶應(yīng)該使用Length屬性。

For x = 0 to WScript.Arguments.Count-1

WScript.Echo WScript.Arguments.Named(x)

Next x

Remove

Remove方法刪除一個現(xiàn)有的環(huán)境變量。

object.Remove(strName)

●       object:WshEnvironment對象。

●       strName:一個字符串值,表示要刪除的環(huán)境變量的名稱。

Remove方法刪除下列類型的環(huán)境變量:

●       PROCESS

●       USER

●       SYSTEM

●       VOLATILE

使用Remove方法刪除的環(huán)境變量將在當(dāng)前會話結(jié)束后被恢復(fù)。

Dim WshShell, WshEnv

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshEnv = WshShell.Environment("PROCESS")

WshEnv("tVar") = "VBScript is Cool!"

WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is:

'%tVar%’")

WshEnv.Remove "tVar"

WScript.Echo WshShell.ExpandEnvironmentStrings("The value of the test variable is:

'%tVar%’")

15.6.8  WshSpecialFolders對象

WshSpecialFolders對象提供對Windows特殊文件夾集合的訪問。

WshShell對象的SpecialFolder屬性返回WshSpecialFolders對象。該集合包含對Windows特殊文件夾(例如,Desktop文件夾和Start menu文件夾)的引用。

從這個集合中可以使用某特殊文件夾的名稱作為索引獲取該文件夾的路徑。一個特殊文件夾的路徑依賴于用戶環(huán)境。如果一臺計算機(jī)上有多個用戶,那么硬盤上就存有若干組特殊文件夾。下面列出了可用的特殊文件夾:

●       AllUsersDesktop

●       AllUsersPrograms

●       AllUsersStartMenu

●       AllUsersStartup

●       Desktop

●       Favorites

●       Fonts

●       MyDocuments

●       NetHood

●       PrintHood

●       Programs

●       Recent

●       SendTo

●       StartMenu

●       Startup

●       Templates

下面的代碼演示了如何在Windows桌面上創(chuàng)建Windows Notepad的一個快捷方式:

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "A Script Generated Shortcut to Notepad"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

</script>

</job>

</package>

1. WshSpecialFolders對象的屬性:Item

WshSpecialFolders對象具有一個屬性:

●       Item

Item屬性暴露集合中某一指定的元素。

Object.Item(natIndex)

●       Object:EnumNetworkDrive或EnumPrinterConnections方法的返回結(jié)果,或Environment 或SpecialFolders屬性返回的對象。

●       natIndex:設(shè)置想要獲取的元素。

Item是每個集合都有的默認(rèn)屬性。對于EnumNetworkDrive和EnumPrinterConnections集合來說,索引是整數(shù),但對于Environment和SpecialFolders集合來說,索引是字符串。

<package>

<job id="vbs">

<script language="VBScript">

Set WshShell = WScript.CreateObject("WScript.Shell")

Set WshSpecialFolders = WshShell.SpecialFolders

For x = 0 To WshSpecialFolders.Count - 1

WScript.Echo WshSpecialFolders.Item(x)

Next

</script>

</job>

</package>

2 WshSpecialFolders對象的方法:Count

WshSpecialFolders對象具有一個方法:

●       Count

Count方法返回WshNamed對象或WshUnnamed對象的開關(guān)數(shù)。

object.Count

●       object:Arguments對象。

Count方法返回一個整數(shù)值。Count方法適用于VBScript用戶,JScript用戶應(yīng)該使用Length屬性。

15.6.9  WshShortcut對象

WshShortcut對象允許您使用腳本創(chuàng)建快捷方式。

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

</script>

</job>

</package>

1. WshShortcut對象的屬性

WshShortcut對象具有8個屬性:

●       Arguments

●       Description

●       FullName

●       Hotkey

●       IconLocation

●       TargetPath

●       WindowStyle

●       WorkingDirectory

Arguments

Arguments屬性包含WshArguments對象(一個參數(shù)集合)。從該集合中獲取單個參數(shù)值時,使用由0開始的索引。

Set objArgs = WScript.Arguments

For x = 0 to objArgs.Count - 1

WScript.Echo objArgs(x)

Next

Description

Description屬性返回快捷方式的描述信息。

object.Description1

●       Object:WshShortcut對象。

Description屬性包含一個描述快捷方式的字符串值。

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Script generated shortcut to Notepad"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

</script>

</job>

</package>

FullName

FullName屬性返回快捷方式對象目標(biāo)的有效完整路徑。

object.FullName

●       Object:WshShortcut對象。

FullName屬性包含一個只讀字符串,給出了快捷方式目標(biāo)的有效完整路徑。

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

HotKey

HetKey屬性用于給快捷方式指定一個熱鍵,或識別快捷方式的熱鍵。一個快捷方式的熱鍵是指一些按鍵的組合,當(dāng)同時按下這些按鍵時,就會啟動該快捷方式。

object.Hotkey = strHotkey

●       Object:WshShortcut對象。

●       strHotkey:一個字符串,表示指定給快捷方式的熱鍵。

下面是strHotkey的語法:

[KeyModifier]KeyName

●       KeyModifier:KeyModifier可以是這些鍵之一:Alt+、Ctrl+、Shift+、Ext+。

Ext+指的是“擴(kuò)展鍵”。這個鍵的加入是為了將來可能會在字符集中加入一類新的Shift鍵。

KeyName- a ... z, 0 ... 9, F1 ... F12, ...

KeyName是大小寫不敏感的。

修改前面的代碼,添加一個熱鍵,如下。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop")

set oShellLink = WshShell.CreateShortcut(strDesktop & "/ShortcutScript.lnk")

oShellLink.TargetPath = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

IconLocation

IconLocation屬性用于給快捷方式指定一個圖標(biāo),或識別快捷方式的圖標(biāo)。

object.IconLocation = strIconLocation

●       Object:WshShortcut對象。

●       strIconLocation:一個字符串,指定要使用的圖標(biāo)。該字符串應(yīng)該包含圖標(biāo)的一個有效的完整路徑,以及該圖標(biāo)所關(guān)聯(lián)的一個索引。如果有多個圖標(biāo),可以使用索引選擇其中的一個。索引起始于0。

修改先前的代碼,給快捷方式指定一個標(biāo)準(zhǔn)的Notepad圖標(biāo)。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop")

set oShellLink = WshShell.CreateShortcut(strDesktop & "/ShortcutScript.lnk")

oShellLink.TargetPath = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

TargetPath

TargetPath屬性給出了快捷方式執(zhí)行文件的路徑。

object.TargetPath

●       Object:WshShortcut或WshUrlShortcut對象。

這個屬性只用于快捷方式的目標(biāo)路徑,其他所有的參數(shù)必須放在Argument的屬性中。

<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 = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

WindowsStyle

Windowstyle屬性用于指定快捷方式的窗口類型,或識別快捷方式所使用的窗口類型。

object.WindowStyle = intWindowStyle

●       Object:WshShortcut對象。

●       intWindowStyle:設(shè)置程序執(zhí)行窗口的類型。

WindowStyle屬性返回一個整數(shù)。

表15-20列出了intWindowStyle的可用值。

表15-20

intWindowStyle

描    述

1

激活并顯示一個窗口

如果該窗口處于最小化或最大化狀態(tài),系統(tǒng)將恢復(fù)其原始尺寸

如果是初次顯示該窗口,應(yīng)用程序就應(yīng)該指定這個標(biāo)志

3

激活并以最大化狀態(tài)顯示窗口

7

以最小化形式顯示窗口

活躍的窗口將繼續(xù)保持活躍

下面代碼中的改動保證Notepad窗口處于活躍狀態(tài)。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop")

set oShellLink = WshShell.CreateShortcut(strDesktop & "/ShortcutScript.lnk")

oShellLink.TargetPath = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

WorkingDirectory

WorkingDirectory屬性用于指定快捷方式的工作目錄,或識別快捷方式所使用的工作目錄。

object.WorkingDirectory = strWorkingDirectory

●       Object:WshShortcut對象。

●       strWorkingDirectory:一個字符串,表示快捷方式的起始目錄。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

strDesktop = WshShell.SpecialFolders("Desktop")

set oShellLink = WshShell.CreateShortcut(strDesktop & "/ShortcutScript.lnk")

oShellLink.TargetPath = WScript.ScriptFullName

oShellLink.WindowStyle = 1

oShellLink.Hotkey = "CTRL+SHIFT+N"

oShellLink.IconLocation = "notepad.exe, 0"

oShellLink.Description = "Shortcut Script"

oShellLink.WorkingDirectory = strDesktop

oShellLink.Save

WScript.Echo oShellLink.FullName

</script>

</job>

</package>

2. WshShortcut對象的方法

WshShortcut對象具有一個方法:

●       Save

Save方法將一個快捷方式保存到磁盤。

object.Save

●       Object:WshShortcut或WshUrlShortcut對象。

使用CreateShortcut方法創(chuàng)建一個快捷方式并設(shè)置該快捷方式對象的屬性后,可以使用Save方法將該快捷方式對象保存到硬盤上。Save方法使用快捷方式對象的FullName屬性中的信息確定在硬盤上保存快捷方式對象的位置。

只能對系統(tǒng)對象創(chuàng)建快捷方式—— 文件、目錄和磁盤驅(qū)動器。不能為打印機(jī)或調(diào)度任務(wù)創(chuàng)建快捷方式。

15.6.10  WshUrlShortcut對象

WshUrlShortcut對象允許您使用腳 本創(chuàng)建到Internet資源的快捷方式。該對象是WshShell對象的子對象。必須使用WshShell方法的CreateShortcut來創(chuàng)建 WshUrlShortcut對象。下面的代碼可以保存為一個后綴名為.wsf的Windows腳本文件。

WshShell.CreateShortcut(strDesktop & "/URLShortcut.lnk")

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

set oUrlLink = WshShell.CreateShortcut(strDesktop & "/Wrox Web Site.url")

oUrlLink.TargetPath = "http://www."

oUrlLink.Save

</script>

</job>

</package>

1. WshUrlShortcut對象的屬性

WshUrlShortcut對象具有兩個屬性:

●       FullName

●       TargetPath

FullName

FullName屬性返回快捷方式對象目標(biāo)的有效完整路徑。

object.FullName

●       Object:WshUrlShortcut對象。

FullName屬性包含一個只讀的字符串,給出快捷方式目標(biāo)的有效的完整路徑。下面的代碼可以保存為一個后綴名為.wsf的Windows腳本文件。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

set oUrlLink = WshShell.CreateShortcut(strDesktop & "/Wrox Web Site.url")

oUrlLink.TargetPath = "http://www."

oUrlLink.Save

WScript.Echo oUrlLink.FullName

</script>

</job>

</package>

TargetPath

TargetPath屬性給出了快捷方式可執(zhí)行文件的路徑。

object.TargetPath

●       Object:WshUrlShortcut對象。

這個屬性只用于快捷方式的目標(biāo)路徑,其他所有的參數(shù)必須放在Argument的屬性中。下面的代碼可以保存為一個后綴名為.wsf的Windows腳本文件。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

set oUrlLink = WshShell.CreateShortcut(strDesktop & "/Wrox Web Site.url")

oUrlLink.TargetPath = "http://www."

oUrlLink.Save

WScript.Echo oUrlLink.FullName

</script>

</job>

</package>

2. WshUrlShortcut對象的方法

WshUrlShortcut對象具有一個方法:

●       Save

Save方法將快捷方式對象保存到磁盤。

object.Save

●       Object:WshUrlShortcut對象。

使用CreateShortcut方法創(chuàng)建一個 快捷方式并設(shè)置該快捷方式對象的屬性后,可以使用Save方法將該快捷方式對象保存的硬盤上。Save方法使用快捷方式對象的FullName屬性中的信 息確定在硬盤上保存快捷方式對象的位置。下面的代碼可以保存為一個后綴名為.wsf的Windows腳本文件。

<package>

<job id="vbs">

<script language="VBScript">

set WshShell = WScript.CreateObject("WScript.Shell")

set oUrlLink = WshShell.CreateShortcut(strDesktop & "/Wrox Web Site.url")

oUrlLink.TargetPath = "http://www."

oUrlLink.Save

WScript.Echo oUrlLink.FullName

</script>

</job>

</package>

15.2  WSH的概念

WSH是一個Windows管理工具。WSH創(chuàng)建了一個腳本運(yùn)行的主環(huán)境,當(dāng)腳本到達(dá)一臺計算機(jī)時,WSH扮演主人的角色。WSH使腳本能夠使用對象和服務(wù),并提供腳本執(zhí)行的準(zhǔn)則。此外,WSH還負(fù)責(zé)安全管理以及調(diào)用適當(dāng)?shù)哪_本引擎。

因為WSH是與腳本語言無關(guān)的,所以它還提供了 使用JScript、Perl、Python、REXX,或其他ActiveX腳本編寫語言(只有VBScript和JScript是Microsoft 提供的,其他ActiveX腳本引擎是由第三方提供的)進(jìn)行腳本編寫的機(jī)制。WSH提供了一些非常便于使用的工具,可以訪問散布在網(wǎng)絡(luò)中,運(yùn)行各種風(fēng)格的 Windows操作系統(tǒng)的機(jī)器,從而提供了網(wǎng)絡(luò)管理的能力。這種訪問大部分是通過活動目錄服務(wù)接口(Active Directory Service Interface,ADSI)和Windows管理規(guī)范(Windows Management Instrumentation,WMI)實現(xiàn)的。ADSI提供了一套COM接口,可以用于多種目錄服務(wù),如輕量級目錄訪問協(xié)議(Lightweight Directory Access Protocol,LDAP)、Windows NT目錄服務(wù),以及Novell的Netware和NDS服務(wù)。WMI是Microsoft基于Web的企業(yè)管理(Web-Based Enterprise Management,WBEM)的實現(xiàn),這種標(biāo)準(zhǔn)的方法可以訪問管理信息,如指定的客戶端上安裝的應(yīng)用程序、系統(tǒng)內(nèi)存,以及其他客戶端信息。

通過開發(fā)使用ADSI和WMI的WSH腳本,系統(tǒng)管理員可以開發(fā)腳本以便執(zhí)行下面列出的這些以及其他更多任務(wù):

●       訪問并操作服務(wù)器

●       添加或刪除用戶以及修改密碼

●       添加網(wǎng)絡(luò)文件共享

目前的WSH版本是5.7,它是隨Windows Vista一起發(fā)布的。該版本相對于先前的版本(2.0)來說具有很多顯著的變化。目前發(fā)布的WSH包含了大量深受程序員喜愛的功能:

●       支持文件包含

●       能夠在同一腳本中使用多種語言

●       支持拖放功能

●       參數(shù)處理

●       可以遠(yuǎn)程運(yùn)行腳本

●       增強(qiáng)對外部對象和類型庫的訪問

●       更強(qiáng)的調(diào)試功能

●       暫停腳本執(zhí)行的機(jī)制(對于接收受控對象產(chǎn)生的事件來說非常有用)

●       標(biāo)準(zhǔn)的輸入/輸出以及標(biāo)準(zhǔn)的錯誤支持(只有在控制臺模式下運(yùn)行cscript.exe時才有用)

●       可以將新的進(jìn)程作為對象來對待

●       對當(dāng)前工作目錄的訪問

●       新改進(jìn)的安全模型

隨Windows Vista發(fā)布的版本5.7中包括針對版本5.6的bug和安全性修正。

WSH 1.0的運(yùn)行機(jī)制比較簡單,只是為VBScript的文件擴(kuò)展名(.vbs)和JScript的文件擴(kuò)展名(.js)關(guān)聯(lián)相應(yīng)的腳本宿主。這意味著如果雙擊一個腳本文件,就會自動執(zhí)行它。但是,這有一個很重要的局限—— 關(guān)聯(lián)模式不允許使用代碼模塊,也不允許在一個WSH腳本項目中使用多種腳本語言。為了滿足各種程序員的需要,Microsoft在WSH 2.0中引入了一種新的腳本文件類型(.wsf),它利用一種XML語法提供前面所提到的很多新的功能。

這種新的機(jī)制在其他的標(biāo)記中包含了<script>標(biāo)記、<object>標(biāo)記和<job>標(biāo)記。在這一章后面的部分中,我們將介紹具體的運(yùn)行機(jī)制。

文件擴(kuò)展名.wsf只在最后發(fā)布的WSH 2.0以及以后的版本中才有效。還在使用WSH 2.0 beta版本的開發(fā)人員仍然必須使用.ws文件擴(kuò)展名。作者建議使用最新的腳本引擎和WSH。

15.3  腳本文件的類型

獨立的腳本文件有一些不同的格式,每種格式都有 自己的擴(kuò)展名。表15-1中列出了一些常見的類型。最終選擇的腳本類型將依賴于需求。多數(shù)小項目只需要使用一種文件類型,但在某些情況下可能需要將整個問題分割成若干個小的部分,為每一部分分別編寫腳本,并且每一部分的腳本都使用最合適的語言進(jìn)行編寫。

表15-1

擴(kuò)  展  名

腳 本 類 型

描    述

.bat

MS-DOS批處理文件

MS-DOS操作系統(tǒng)的批處理文件

.asp

ASP頁面

活動服務(wù)器網(wǎng)頁文件

.htm

HTML文件

Web頁面

(續(xù)表)  

擴(kuò)  展  名

腳 本 類 型

描    述

.html

HTML文件

Web頁面

.js

JScript文件

Windows腳本

.vbs

VBScript文件

Windows腳本

.wsf

Windows腳本宿主文件

一個Windows腳本的容器或項目文件。WSH 2.0或更高版本支持

.wsh

Windows腳本宿主文件

一個腳本文件的屬性文件。WSH 1.0或更高版本支持

這就是Windows腳本宿主文件(WSF文件)的有用之處。WSF文件可以包含其他的腳本文件作為其腳本的一部分。這意味著多個WSF文件可以引用創(chuàng)建并保存在同一地點的庫和有用的函數(shù)。

5.4  使用Windows腳本宿主運(yùn)行腳本

WSH提供了兩個用于執(zhí)行腳本的接口,一個用于命令行,一個用于Windows環(huán)境。這兩個接口各使用不同的宿主程序作為VBScript引擎:

●       cscript.exe:用于在命令行中運(yùn)行腳本

●       wscript.exe:用于在Windows環(huán)境中運(yùn)行腳本

之所以有兩個宿主程序,是因為cscript.exe被設(shè)計為從控制臺窗口啟動(一般來說是Windows中的MS-DOS窗口),而wscript.exe則用于直接與Windows GUI進(jìn)行交互。這兩者就功能來講幾乎沒有區(qū)別。

15.4.1  命令行執(zhí)行

執(zhí)行腳本文件的命令行界面,cscript.exe調(diào)用方法如下:

1. 打開Run對話框(按下窗口鍵+R)或某個命令窗口(在Windows 9x中,可以依次單擊Start|Programs|DOS Prompt;在Windows NT中,依次單擊Start|Programs|Command Prompt;在Vista/XP中,依次單擊Start|All Programs|Accessories|Command Prompt)。

注意,在使用Windows Vista時,打開Command Prompt需要系統(tǒng)管理員權(quán)限。最簡單的方法是以系統(tǒng)管理員身份在開始菜單中用鼠標(biāo)右鍵單擊Command Prompt并選擇Run。

2. 執(zhí)行腳本如下:

cscript c:/folderName/YourScriptName.vbs

如果直接在命令行中運(yùn)行cscript.exe時不加參數(shù),就只會得到使用幫助信息,如圖15-1所示。

圖15-1

使用語法如下:

cscript scriptname.extension [option...] [arguments...]

cscript.exe提供了如表15-2中所列的命令行選項,可以用來控制各種WSH環(huán)境設(shè)置。

表15-2

//B

批處理模式

這種模式下不顯示腳本錯誤和輸出信息

//D

啟用主動調(diào)試

//E:engine

使用引擎來執(zhí)行腳本

//H:Cscript

將默認(rèn)的腳本宿主修改為cscript.exe

//H:Wscript

將默認(rèn)的腳本宿主修改為wscript.exe(此為默認(rèn)選項)

//I

交互模式(此為默認(rèn)選項,它與//B是兩種相反的模式)

//Job:xxxx

執(zhí)行一個WSF作業(yè)

//Logo

顯示logo(此為默認(rèn)選項)

//Nologo

不顯示logo。執(zhí)行時不顯示banner

//S

保存當(dāng)前用戶的當(dāng)前命令行選項

//T:nn

超時時間(以秒為單位)。該時間為腳本在中止執(zhí)行之前被允許的最長執(zhí)行時間

//X

在調(diào)試器中執(zhí)行腳本

//U

使用Unicode重定向來自控制臺的I/O

可以在命令行中以開關(guān)的形式增加這些選項以便使用它們。下面的示例在調(diào)試器中執(zhí)行一個腳本。

cscript MyScript.vbs //X

15.4.2  在Windows環(huán)境中執(zhí)行WSH

執(zhí)行腳本文件的Windows GUI界面是wscript.exe,它允許以下列幾種方式執(zhí)行文件:

●       如果文件的類型注冊為在WSH中執(zhí)行,就可以直接在文件夾窗口或桌面上雙擊這些文件的圖標(biāo)來執(zhí)行。

●       如果使用Run命令對話框,那么就只要輸入腳本的完整路徑和名稱即可。

在Run命令對話框中,可以調(diào)用wscript.exe。

wscript c:/folderName/YourScriptName.vbs

如果在命令行提示符下運(yùn)行wscript.exe,就不會有輸出信息,而是會出現(xiàn)一個如圖15-2所示的對話框。該對話框提供了最基本的定制選項。如果在Run命令對話框中運(yùn)行wscript.exe,也會出現(xiàn)相同的對話框。

圖15-2

單擊OK按鈕后,將不會有任何反應(yīng)。在系統(tǒng)級定制腳本行為的唯一方法就是使用先前曾詳細(xì)介紹的cscript選項。使用.wsh文件實現(xiàn)的每個腳本的獨立定制將使用該對話框來完成,這在稍后會介紹。

那么這兩種運(yùn)行腳本的方法之間有什么區(qū)別呢?當(dāng) 調(diào)試一個出錯腳本時,cscript和wscript之間的主要區(qū)別實際上變得更明顯了。這是因為,相對于wscript可能產(chǎn)生的沒完沒了的彈出窗口來說,向一個控制臺窗口發(fā)送錯誤消息顯得更快更容易。在調(diào)試腳本時,推薦使用cscript,而在打印調(diào)試輸出結(jié)果時,最好使用WScript對象的 Echo方法,因為調(diào)試時能產(chǎn)生大量的需要關(guān)注的錯誤信息。實際上,有時可能使調(diào)試者陷入循環(huán),無法從錯誤消息中擺脫出來。

15.5  使用.WSH文件運(yùn)行腳本

有時也許不想或不需要在每次執(zhí)行腳本時都修改設(shè) 置,但又有可能需要控制單個的文件,這一點可以通過創(chuàng)建控制文件來實現(xiàn)??刂莆募臄U(kuò)展名為.wsh,用于控制單個腳本的設(shè)置。.wsh文件是短小的配置 文件,它大體上遵循以前的Windows所使用的.ini文件格式(但這并不是說有程序員已經(jīng)不再使用類似于.ini文件的配置文件了)。.wsh文件非常便于定制腳本的啟動—— 一個腳本可以使用多個不同的.wsh文件。

要創(chuàng)建一個.wsh文件,可以用鼠標(biāo)右鍵單擊一個與WSH關(guān)聯(lián)的文件(一般帶有.js、.vbs或.wsf的擴(kuò)展名),然后選擇Properties,在圖15-3所示的對話框中選擇Script標(biāo)簽頁。

圖15-3

這個對話框可以用于修改超時時間的默認(rèn)設(shè)置,也 可以修改在命令行中運(yùn)行腳本時,是否顯示logo信息。一旦應(yīng)用或接受了所做的修改,就會創(chuàng)建一個新的文件,文件名與所處理的腳本文件相同,只是擴(kuò)展名為.wsh。這個新的文件記錄了定制的設(shè)置,其格式可以被宿主引擎設(shè)置運(yùn)行時選項。這里給出一個從腳本test.vbs創(chuàng)建的一個.wsh文件。

[ScriptFile]

Path=C:/test.vbs

[Options]

Timeout=25

DisplayLogo=0

要使用這些選項執(zhí)行腳本,就應(yīng)該運(yùn)行test.wsh文件。

轉(zhuǎn)摘源地址:http://wenku.baidu.com/view/5d23660203d8ce2f006623af.html 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多