qtp:vbs基礎教程

轉載自 http://www.cnblogs.com/zhangjun1130/archive/2010/06/08/1753826.html


◎Vbs腳本編程簡明教程之一—爲什麼要使用Vbs?
在Windows中,學習計算機操作也許很簡單,但是很多計算機工作是重複性勞動,例如你每週也許需要對一些計算機文件進行復制、粘貼、改名、刪除,也許你每天啓動計算機第一件事情就是打開WORD,切換到你喜愛的輸入法進行文本編輯,同時還要播放優美的音樂給工作創造一個舒心的環境,當然也有可能你經常需要對文本中的某些數據進行整理,把各式各樣的數據按照某種規則排列起來……。這些事情重複、瑣碎,使人容易疲勞。

第三方軟件也許可以強化計算機的某些功能,但是解決這些重複勞動往往事倍功半,我也嘗試過使用計算機語言編寫程序來解決這些問題,但是隨之而來的命令、語法、算法、系統框架和類庫常常讓我覺得這樣是否有必要,難道就是因爲豬毛比較難拔,所以我就要去學習機械,爲自己設計一個拔豬毛機(?)嗎?

Vbs是一種Windows腳本,它的全稱是:Microsoft Visual Basic Script Editon.(微軟公司可視化BASIC腳本版),VBS是Visual Basic的的一個抽象子集,是系統內置的,用它編寫的腳本代碼不能編譯成二進制文件,直接由Windows系統執行(實際是一個叫做宿主host的解釋源代碼並執行),高效、易學,但是大部分高級語言能幹的事情,它基本上都具備,它可以使各種各樣的任務自動化,可以使你從重複瑣碎的工作中解脫出來,極大的提高工作效率。

我個人認爲Vbs腳本其實就是一種計算機編程語言,但是由於缺少計算機程序設計語言中的部分要素,對於事件的描述能力較弱,所以稱爲腳本,它最方便的地方就是提供了對COM對象的簡便支持。那麼什麼是COM對象呢?

我這樣理解,COM對象就是一些具有特定函數功能項程序模塊,他們一般以ocx或者dll作爲擴展名,你只要找到包含有你需要的功能的模塊文件,並在腳本中規範的引用,就可以實現特定的功能,也就是說Vbs腳本就是調用現成的“控件”作爲對象,用對象的屬性和方法實現目的,完全免去了編寫代碼、設計算法等等麻煩。說白了,我不是覺得拔豬毛麻煩麼?我發覺xx機(比如真空離心器)有一個功能可以實現脫毛,ok,我把它拿來給豬脫毛。什麼?大材小用?太浪費資源了?天哪,那是計算機芯片的事情,死道友不死貧道,反正我的事情是方便快速的解決了,這就行了。

最方便的是它甚至不需要專門的開發環境,在你的計算機中,只要有notepad,就可以編寫Vbs腳本了,並且可以直接執行。


◎Vbs腳本編程簡明教程之二—如何開始第一個Vbs腳本?

就像多數計算機教程一樣 ,我們從“Hello World!”程序開始我們的練習。什麼?不知道是什麼意思?就是說大部分的計算機程序設計教程開篇入門都是編寫一個小程序,執行這個程序的結果就是在計算機的屏幕上或者dos窗口中顯示一行文字:Hello World!好了,我們開始吧。

打開你的“記事本”程序,在編輯窗口填寫:

msgbox "Hello World!"

然後用鼠標單擊“文件”菜單,單擊“保存”,把“保存在”一欄設爲桌面,在“文件名”一欄中填寫kk.vbs,單擊“保存”就可以了。然後最小化“記事本”窗口,在桌面上尋找你剛剛保存的kk.vbs,然後雙擊。看到彈出的對話框了沒有,單擊“確定”,對話框消失了。難看了點,不過確實是你編寫的第一個腳本程序。

說明之一:上面的操作中,保存位置放在桌面,僅僅是爲了執行方便,你保存到其他的地方完全沒有問題,只要你知道你保存在什麼地方就可以了,什麼?是廢話,自己保存的當然知道保存在那裏了。不,自己保存的文件自己找不到的人我見的多了去了。文件名你可以隨意填寫,不一定非要寫kk,只要符合Windows的文件命名規則就可以了,但是擴展名必須是vbs,什麼?不知道什麼是擴展名?就是文件名中“.”後的那部分,簡單說,就是vbs腳本文件命名時必須是:xxx.vbs,其中xxx你隨意。

說明之二:在記事本編輯窗口中寫的這行是什麼意思?

Msgbox是VBS內建的函數,每一個函數都可以完成一定的功能,你只需要按照語法要求,在函數的相應部分填寫相應的內容就可以了,這部分內容我們稱爲參數,當然函數執行的結果我們稱爲返回值,一個函數可以有返回值也可以沒有,可以有參數也可以沒有。你不用瞭解函數是怎麼運作的,只要瞭解這個函數能幹什麼就行了。

Msgbox語法:msgbox "對話框內容", , "對話框的標題"

你不妨用記事本打開剛纔的文件在編輯窗口中輸入:

msgbox "Hello World!" , , "系統提示"

執行一下,看看效果和位置。

說明之三:如果執行失敗,看看你的標點符號,所有的標點符號必須是在英文狀態下輸入的。

當然,這個腳本實在是太簡單了,甚至連最簡單的交互都沒有,所以你可以把腳本這樣修改一下:

Dim name

name=Inputbox("請輸入你的名字:","名稱")

Msgbox name, , "您的名字是"

保存執行一下,看到彈出的對話框了麼?填入你的名字,點確定,看到結果了嗎?

說明之一:第一句是定義變量,dim是定義變量的語句

其格式爲:dim 變量1,變量2……,

Vbs只有一種變量類型,所以不用聲明變量類型。系統會自動分辨變量類型。

說明之二:inputbox是VBS內建的函數,可以接受輸入的內容,其語法格式爲:

Inputbox("對話框內容","對話框標題")

第二句的意思是接受用戶的輸入,並把輸入結果傳遞給變量name。

好了,到此腳本基本的輸入輸出函數都有了,已經可以完成一些比較簡單的功能了,你可以編寫一個簡單的腳本,然後拷貝的“程序”—>“啓動”中,然後重新啓動計算機看看結果。

◎Vbs腳本編程簡明教程之三—Vbs的基本語法(牢記)
VBScript
基礎知識

一、變量

1、所有單引號後面的內容都被解釋爲註釋。

2、在VBScript中,變量的命名規則遵循標準的命名規則,需要注意的是:在VBScript中對變量、方法、函數和對象的引用是不區分大小寫的。在申明變量時,要顯式地申明一個變量,需要使用關鍵字DIm來告訴VBScript你要創建一個變量,並將變量名稱跟在其後。申明多個同類型變量,可以用逗號分隔。注意:VBScript中不允許在申明變量的時候同時給變量賦值。但是允許在一行代碼內同時對兩個變量進行賦值,中間用冒號分隔。

3、你可以使用OptionExplicit來告訴宿主變量必須先聲明後使用。

4、VBScript在定義時只有一種變量類型,在實際使用中需要使用類型轉換函數來將變量轉換成相應的變量類型。

Cbool函數將變量轉換成布爾值;

Cbyte函數將變量轉換爲0到255之間的整數。

Ccur函數、Cdbl函數和Csng函數將變量轉換爲浮點數值,前者只精確到小數點後四位,後兩者要更加精確,數值的範圍也要大的多。

Cdate函數將變量轉換爲日期值。

Cint函數和Clng函數將變量轉換爲整數,後者的範圍比前者要大的多。

Cstr函數將變量轉換爲字符串。

二、數組

數組的定義與變量非常類似,只需要在變量後描述這個數組的個數和維數。需要注意的是:數組的下標總是從0開始,而以數組定義中數值減一結束。也就是說你以要定義一個有十個數據的數組,將這樣書寫代碼:dImarray(9),同樣,當你要訪問第五個元素時,實際的代碼是array(4)。當然,你可以通過不指定數組的個數和維數來申明動態數組。等到數組的個數和維數固定後,使用關鍵字redim來改變數組。注意,在改變數組的大小時,數組的數據會被破壞,使用關鍵字preserve來保護數據。例如:

RedIm空格preserve空格array括號個數逗號維數括號

三、操作符

在VBScript運算符中,加減乘除都是我們常用的符號,乘方使用的是 ^ ,取模使用的Mod。

在比較操作符中,等於、小於、大於、小於等於、大於等於都與我們常用的符號是一致的,而不等於是小於和大於連用。

邏輯運算符爲:和操作—>AND     非操作—>NOT     或操作—>OR;

你可以使用操作符 + 和操作符 & 來連接字符串,一般使用&操作符;

另外還有一個比較特殊的操作符Is用來比較對象,例如按鈕對象,如果對象是同一類型,結果就是真,如果對象不是同一類型,結果就是假。

四、條件語句主要有if……then語句和selectcase語句兩種形式

在if……then語句中,其基本形式爲:

If 條件 then

處理條件的語句;

……

Endif

基本形式只能對單個條件進行驗證,如果有兩個條件,則需要在基本形式中添加單行語句else,如果還有更多的條件需要驗證,則需要添加語句

Elseif 條件 then

處理條件語句

在selectcase語句中,其基本形式爲:

Select case 變量

Case 條件值

處理條件語句

並對上兩句進行重複

最後一句應爲

case else

處理語句

當然不要忘記將條件結束語句End select放在最後一行

注意:在執行字符串比較時,需要特別注意大小寫,一般情況下,我們在比較前,使用lcase函數將字符串轉換成小寫,使用ucase函數將字符串轉換成大寫大寫。

五、循環控制語句

循環控制語句有for……next循環、for……each循環、do……while循環、do……until循環、while循環五種形式。

在使用循環控制語句前,首先要對循環條件進行判斷,如果循環次數是有固定次數的,那麼使用For……next循環,其結構爲:

For   計數器變量=開始計數值 to 最後計數值

執行循環體

Next

如果是需要對數組或對象集合中的每一個元素進行判斷,則需要使用for……each循環,其結構爲:

For each 循環計數變量 in 要查看的對象或數組

執行處理語句

Next

注意:在上述兩種循環中隨時可以使用exit for來退出循環

如果你希望在條件滿足時執行一段代碼則使用do……while語句,結構爲:

Do while 條件

執行循環體

Loop

如果你希望在條件不滿足時執行代碼,則使用do……until語句,結構爲:

Do until 條件

執行循環體

Loop

當然,在這兩種循環語句中,你可以使用exit do來退出循環

最後一種循環語句是條件滿足時一直執行循環,

While 條件

執行循環體

Wend

六、使用過程

常用的過程有兩種,一種爲函數,給調用者返回值,一種爲子程序,無返回值,還有一種叫事件的特殊子程序,用的比較少。

函數的基本定義方法爲:

Function 函數名稱(參數列表)

函數代碼

函數名稱=某值 ‘用來返回值

end function

子程序一些都類似,不過沒有返回值

注意:儘管在定義子程序的時候,參數列表要加括號,但在調用子程序的時候,參數列表不加括號,括號只在函數中使用。另外,子程序不能在表達式中使用。

而函數只能出現在賦值語句的右邊,或者表達式中,函數不能直接使用,如果必須直接使用函數,則必須使用call語句調用,並取消返回值。

◎Vbs腳本編程簡明教程之四—如何利用Vbs運行外部程序?
Vbs
只提供了編程的一個基本框架,用戶可以使用Vbs來定義變量、過程和函數,vbs也提供了一些內部函數和對象,但是Vbs沒有提供任何命令來訪問Windows系統內部的部件,但是值得慶幸的是,Vbs雖然不能自己完成這些任務,但是它提供了一條極爲方便、功能也相當強的命令——CreateObject,這條命令可以訪問windows系統內安裝的所有com對象,並且可以調用這些部件中存放的命令。

於是問題解決了,比如說,我手頭有1000個小文本,我首先要對每一個文本的語法進行查錯和修改,然後按照預先定義好的規則對這些文本進行排序,最後將這些文本合併成爲一個文件。正常情況下,我們需要把打開第一個小文本,然後把它複製到WORD中,然後利用裏面的除錯功能進行除錯和修改,然後再導入到EXCEL中進行排序,將這個過程重複1000遍,然後再將所有得到的文本複製到一個大文本中。實在是太枯燥、工作量太大了。有了Vbs和CreateObject,問題得到解決,我只需要找到相應的模塊,調用相應的功能就可以了,作爲腳本,把一個枯燥的過程重複1000次,本就是它的拿手好戲。

好了,我們走入正題,從最簡單的——只啓動一個程序開始。

WSH也就是用來解析Vbs的宿主,本身包含了幾個個常用對象:

1、Scripting.FileSystemObject —> 提供一整套文件系統操作函數

2、Scripting.Dictionary —> 用來返回存放鍵值對的字典對象

3、Wscript.Shell —> 提供一套讀取系統信息的函數,如讀寫註冊表、查找指定文件的路徑、讀取DOS環境變量,讀取鏈接中的設置

4、Wscript.NetWork —>

提供網絡連接和遠程打印機管理的函數。(其中,所有Scripting對象都存放在SCRRUN.DLL文件中,所有的Wscript對象都存放在WSHOM.ocx文件中。)

現在我們需要的是第三個對象,好了,讓我們先連接一下對象看看,在記事本的編輯窗口中輸入:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad”

同樣,保存執行。那麼看到了一個什麼樣的結果呢?在桌面上又打開了一個記事本。

說明之一:Set是Vbs指令,凡是將一對象引用賦給變量,就需要使用set關鍵字。那麼什麼是對象引用呢?凡是字符串、數值、布爾值之外的變量都是對象引用。Objshell是變量名,可以隨意修改。

說明之二:反是正確引用的對象,其本身內置有函數和變量,其引用方法爲在變量後加“. ”,後緊跟其實現功能的函數就可以了。Objshell.run

的意思就是調用Wscript.shell中的運行外部程序的函數——run,notepad是記事本程序的文件名。當然你也可以改成“calc”,這是計算器的文件名,winword是word的文件名,等等吧,所有可執行文件的文件名都可以。但是需要注意的是,如果你要執行的可執行文件存放的地方不是程序安裝的常用路徑,一般情況下,需要提供合法的路徑名,但是run在運行解析時,遇到空格會停止,解決的方法是使用雙引號,例如:在我的機器上運行qq,代碼爲:

objshell.run """C:\Program Files\QQ2006\QQ.exe""" ‘注:三個引號

好, 我們再進一步,啓動兩個程序會如何呢?

輸入如下代碼:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad”

objShell.Run “calc”

執行會如何呢?兩個程序基本上同時啓動了。如果我們需要先啓動notepad再啓動calc將如何呢?很簡單在需要順序執行的代碼後加 , , True參數就可以了。

好了輸入代碼:

Set objShell = CreateObject(“Wscript.Shell”)

objShell.Run “notepad” ,,true

objShell.Run “calc”

看看執行的結果怎麼樣吧!

總結:run函數有三個參數,第一個參數是你要執行的程序的路徑,第二個程序是窗口的形式,0是在後臺運行;1表示正常運行;2表示激活程序並且顯示爲最小化;3表示激活程序並且顯示爲最大化;一共有10個這樣的參數我只列出了4個最常用的。

第三個參數是表示這個腳本是等待還是繼續執行,如果設爲了true,腳本就會等待調用的程序退出後再向後執行。

其實,run做爲函數,前面還有一個接受返回值的變量,一般來說如果返回爲0,表示成功執行,如果不爲0,則這個返回值就是錯誤代碼,可以通過這個代碼找出相應的錯誤。

◎Vbs腳本編程簡明教程之五—錯誤處理
引發錯誤的原因有很多,例如用戶輸入了錯誤類型的值,或者腳本找不到必需的文件、目錄或者驅動器,我們可以使用循環技術來處理錯誤,但是VBS本身也提供了一些基本技術來進行錯誤的檢測和處理。

1、最常見的錯誤是運行時錯誤,也就是說錯誤在腳本正在運行的時候發生,是腳本試圖進行非法操作的結果。例如零被作爲除數。在vbs中,任何運行時錯誤都是致命的,此時,腳本將停止運行,並在屏幕上顯示一個錯誤消息。你可以在腳本的開頭添加

On Error Resume Next

這行語句可以告訴vbs在運行時跳過發生錯誤的語句,緊接着執行跟在它後面的語句。

發生錯誤時,該語句將會把相關的錯誤號、錯誤描述和相關源代碼壓入錯誤堆棧。

2、雖然On Error Resume

Next語句可以防止vbs腳本在發生錯誤時停止運行,但是它並不能真正處理錯誤,要處理錯誤,你需要在腳本中增加一些語句,用來檢查錯誤條件並在錯誤發生時處理它。

vbscript提供了一個對象err對象,他有兩個方法clear,raise,5個屬性:description,helpcontext,helpfile,number,source

err對象不用引用實例,可以直接使用,例如:

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腳本編程簡明教程之六—修改註冊表
Vbs
中修改註冊表的語句主要有:

1、讀註冊表的關鍵詞和值:

可以通過把關鍵詞的完整路徑傳遞給wshshell對象的regread方法。例如:

set ws=wscript.createobject("wscript.shell")

v=ws.regread("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\nwiz")

wscript.echo v

2、寫註冊表

使用wshshell對象的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這個鍵值改成了hello.不過要注意:這個鍵值一定要預先存在。

如果要創建一個新的關鍵詞,同樣也是用這個方法。

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

刪除關鍵字和值

使用regdelete方法,把完整的路徑傳遞給regdelete就可以了

例如

val=ws.regdel(path)

注意,如果要刪除關鍵詞的值的話 一定要在路徑最後加上“\”,如果不加斜線,就會刪除整個關鍵詞。

當然,從現在的角度看,還是使用WMI的註冊表處理功能也許更好些。


◎windows
的常用自動啓動項
Windows啓動時通常會有一大堆程序自動啓動。不要以爲管好了“開始→程序→啓動”菜單就萬事大吉,實際上,在Windows

XP/2K中,常見的兩個文件夾和八個註冊鍵都可以使程序實現自動啓動。

一、當前用戶專有的啓動文件夾:這是許多應用軟件自動啓動的常用位置,Windows自動啓動放入該文件夾的所有快捷方式。用戶啓動文件夾一般在:\Documents

and Settings\<用戶名字>\“開始”菜單\程序\啓動,其中“<用戶名字>”是當前登錄的用戶帳戶名稱。

二、對所有用戶有效的啓動文件夾:這是尋找自動啓動程序的第二個重要位置,不管用戶用什麼身份登錄系統,放入該文件夾的快捷方式總是自動啓動——這是它與用戶專有的啓動文件夾的區別所在。該文件夾一般在:\Documents

and Settings\All Users\“開始”菜單\程序\啓動。

三、Load註冊鍵:也能夠自動啓動程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。

四、Userinit註冊鍵:位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。這裏也能夠使系統啓動時自動初始化程序。通常該註冊鍵下面有一個userinit.exe,這個鍵允許指定用逗號分隔的多個程序,例如“userinit.exe,OSA.exe”(不含引號)。

五、Explorer\Run註冊鍵:和load、Userinit不同,Explorer\Run鍵在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具體位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policie*\**plorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policie*\**plorer\Run。

六、RunServicesOnce註冊鍵:RunServicesOnce註冊鍵用來啓動服務程序,啓動時間在用戶登錄之前,而且先於其他通過註冊鍵啓動的程序。RunServicesOnce註冊鍵的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。

七、RunServices註冊鍵:RunServices註冊鍵指定的程序緊接RunServicesOnce指定的程序之後運行,但兩者都在用戶登錄之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。

八、RunOnce\Setup註冊鍵:RunOnce\Setup指定了用戶登錄之後運行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。

九、RunOnce註冊鍵:安裝程序通常用RunOnce鍵自動運行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce鍵會在用戶登錄之後立即運行程序,運行時機在其他Run鍵指定的程序之前。HKEY_CURRENT_USER下面的RunOnce鍵在操作系統處理其他Run鍵以及“啓動”文件夾的內容之後運行。如果是XP,你還需要檢查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。

十、Run註冊鍵:Run是自動運行程序最常用的註冊鍵,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run鍵緊接HKEY_LOCAL_MACHINE下


◎Vbs腳本編程簡明教程之七—FSO的常見對象和方法
文件系統是所有操作系統最重要的部分之一,腳本經常會需要對文件及文件夾進行訪問和管理,在Vbs中對桌面和文件系統進行訪問的頂級對象是FileSystemObject(FSO),這個對象特別複雜,是vbs進行文件操作的核心。此節內容應瞭如指掌。

FSO包含的常見對象有:

Drive對象:包含儲存設備的信息,包括硬盤、光驅、ram盤、網絡驅動器

Drives集合:提供一個物理和邏輯驅動器的列表

File 對象:檢查和處理文件

Files 集合:提供一個文件夾中的文件列表

Folder對象:檢查和處理文件夾

Folders集合:提供文件夾中子文件夾的列表

Textstream對象:讀寫文本文件

FSO的常見方法有:

BulidPath:把文件路徑信息添加到現有的文件路徑上

CopyFile:複製文件

CopyFolder:複製文件夾

CreateFolder:創建文件夾

CreateTextFile:創建文本並返回一個TextStream對象

DeleteFile:刪除文件

DeleteFolder:刪除文件夾及其中所有內容

DriveExits:確定驅動器是否存在

FileExits:確定一個文件是否存在

FolderExists:確定某文件夾是否存在

GetAbsolutePathName:返回一個文件夾或文件的絕對路徑

GetBaseName:返回一個文件或文件夾的基本路徑

GetDrive:返回一個dreve對象

GetDriveName:返回一個驅動器的名字

GetExtensionName:返回擴展名

GetFile:返回一個file對象

GetFileName:返回文件夾中文件名稱

GetFolder:返回一個文件夾對象

GetParentFolderName:返回一個文件夾的父文件夾

GetSpecialFolder:返回指向一個特殊文件夾的對象指針

GetTempName:返回一個可以被createtextfile使用的隨機產生的文件或文件夾的名稱

MoveFile:移動文件

MoveFolder:移動文件夾

OpenTextFile:打開一個存在的文件並返回一個TextStream對象


◎Vbs腳本編程簡明教程之八—FSO中文件夾的基本操作
1
、使用fso

由於fso不是wsh的一部分,所以我們需要建立他的模型

例如

set fs=wscript.createobject(“scripting.filesystemobject”)

樣就建立了fso的模型。如果要釋放的話也很簡單,

set fs=nothing

2、使用文件夾

在創建前,我們一般需要檢查該文件夾是否存在例如:

dim fs,s //定義fs、s兩個變量

set fs=wscript.createobject(“scripting.filesystemobject”) //fs爲FSO實例

if (fs.folderexists(“c:\temp”)) then //判斷c:\temp文件夾是否存在

s=”is available”

else

s=”not exist”

set foldr=fs.createfolder(“c:\temp”) //不存在則建立

end if

拷貝:


注意:如果c:\data 和d:\data都存在,腳本會出錯,複製也就會停止,如果要強制覆蓋,使用fs.copyfolder “c:\data”

“d:\data”,true

移動:

set fs=wscript.createobject(“scripting.filesystemobject”)

fs.movefolder “c:\data” “d:\data”

我們可以使用統配符,來方便操作:

例如, fs.movefolder :c:\data\te*” , “d:\working”

注意:在目的路徑最後沒有使用“\” 也就是說我沒有這樣寫:

fs.movefolder c:\data\te*” , “d:\working\”

這樣寫的話,如果d:\working 目錄不存在,windows就不會爲我們自動創建這個目錄。

注意:上面我們所舉的例子都是在利用fso提供的方法,如果使用folder對象也完全是可以的:

set fs= wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfolder(“c:\data”)

f.delete //刪除文件夾c:\data。如果有子目錄,也會被刪除

f.copy “d:\working”,true    //拷貝到d:\working

f.move “d:\temp”    //移動到d:\temp

一般指的就是系統文件夾:\windows\system32,

臨時文件夾,windows文件夾,在前幾篇的時候,我們提過一下:例如

set fs=wscript.createobject(“scripting.filesystemobject”)

set wshshell=wscript.createobject(“wscript.shell”)

osdir=wshshell.expandenvironmentstrings(“%systemroot%”)

set f =fs.getfolder(osdir)

wscript.echo f

這個方法使用3種值:

0 表示windows文件夾,相關常量是windowsfolder

1 系統文件夾,相關常量是systemfolder

2 臨時目錄,相關常量temporaryfolder

例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set wfolder=fs.getspecialfolder(0) ‘返回windows目錄

set wfolder=fs.getspecialfolder(1) ‘返回system32\

set wfolder=fs.getspecialfolder(2)´返回臨時目錄

當然,還有簡單的方法 那就是使用getspecialfolder() 3、特殊文件夾

set fs=wscript.createobject(“scripting.filesystemobject”)

fs.copyfolder “c:\data” “d:\data”


set fs=wscript.createobject(“scripting.filesystemobject”)

fs.deletefolder(“c:\windows”)

◎Vbs腳本編程簡明教程之九—妙用SendKeys簡化重複操作
每次開機的時候,你想自動登陸你的QQ或者博客嗎?巧妙使用VBS中的SendKeys命令(這個命令的作用就是模擬鍵盤操作,將一個或多個按鍵指令發送到指定Windows窗口來控制應用程序運行),可以極大的方便我們的常用操作。其使用格式爲:

Object.SendKeys string其中:

Object:爲WshShell對象,即腳本的第一行爲:

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

將Object替換爲WshShell

“string”:表示要發送的按鍵指令字符串,需要放在英文雙引號中。它包含如下內容:

1.基本鍵:一般來說,要發送的按鍵指令都可以直接用該按鍵字符本身來表示,例如要發送字母“x”,使用“WshShell.SendKeys

"x"”即可。當然,也可直接發送多個按鍵指令,只需要將按鍵字符按順序排列在一起即可,例如,要發送按鍵“cfan”,可以使用

“WshShell.SendKeys "cfan"”

2.特殊功能鍵:對於需要與Shift、Ctrl、Alt三個控制鍵組合的按鍵,SendKeys使用特殊字符來表示:Shift — +;Ctrl   —   ^;Alt — %

如要發送的組合按鍵是同時按下Ctrl+E,需要用WshShell.SendKeys

"^e"”表示,如果要發送的組合按鍵是按住Ctrl鍵的同時按下E與C兩個鍵,這時應使用小括號把字母鍵括起來,書寫格式爲“WshShell.SendKeys

"^(ec)"”,這裏要注意它與“WshShell.SendKeys

"^ec"”的區別,後者表示組合按鍵是同時按住Ctrl和E鍵,然後鬆開Ctrl鍵,單獨按下“C”字母鍵。

由於“+”、“^”這些字符用來表示特殊的控制按鍵了,如何表示這些按鍵呢?只要用大括號括住這些字符即可。例如,要發送加號“+”,可使用“WshShell.SendKeys

"{+}"”。另外對於一些不會生成字符的控制功能按鍵,也同樣需要使用大括號括起來按鍵的名稱,例如要發送回車鍵,需要用“WshShell.SendKeys

"{ENTER}"”表示,發送向下的方向鍵用

“WshShell.SendKeys "{DOWN}"”表示。

如果需要發送多個重複的單字母按鍵,不必重複輸入該字母,SendKeys允許使用簡化格式進行描述,使用格式爲“{按鍵

數字}”。例如要發送10個字母“x”,則輸入“WshShell.SendKeys "{x 10}"”即可。

例一:WshShell.SendKeys "^{ESC}u"

代碼的含義爲:按下Ctrl+Esc組合鍵(相當於按Win鍵)打開“開始”菜單,接着按U鍵打開“關機”菜單。

例二:讓VBS腳本自動在記事本中輸入一行文字“hello, welcome to cfan”。

Dim WshShell

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

WshShell.Run "notepad"

WScript.Sleep 2000  

//本行的含義爲是腳本暫停2秒,給notepad一個打開的時間,有時時間太短可能導致後面的字符無法進入編輯區

WshShell.AppActivate "無標題 - 記事本

"//AppActivate爲尋找可執行程序的標題框,”無標題-記事本”內容你的自己打開看一下

WshShell.SendKeys "hello, welcome to cfan"

作業1:讓腳本自動輸入下面兩段小短句

This is the most wonderful day of my life

because I´m here with you now

作業2:讓腳本在輸入短句後自動關閉記事本,並保存文件名爲“test”,注意關閉記事本可以直接使用組合按鍵Alt+F4來實現。


例三:製作能自動定時存盤的記事本

我們最常用的記事本沒有Word、WPS那樣的自動定時存盤功能,其實利用VBS腳本再加上SendKeys命令,就能彌補這個遺憾。打開記事本,輸入以下內容(爲容易描述和分析,把代碼分爲四個部分):

´第一部分:定義變量和對象

Dim WshShell, AutoSaveTime, TXTFileName

AutoSaveTime=300000

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

TXTFileName=InputBox("請輸入你要創建的文件名(不能用中文和純數字):")

´第二部分:打開並激活記事本

WshShell.Run "notepad"

WScript.Sleep 200

WshShell.AppActivate "無標題 - 記事本"

´第三部分:用輸入的文件名存盤

WshShell.SendKeys "^s"

WScript.Sleep 300

WshShell.SendKeys TXTFileName

WScript.Sleep 300

WshShell.SendKeys "%s"

WScript.Sleep AutoSaveTime

´第四部分:自動定時存盤

While WshShell.AppActivate (TXTFileName)=True

WshShell.SendKeys "^s"

WScript.Sleep AutoSaveTime

Wend

WScript.Quit

將其保存爲記事本.vbs,以後要使用記事本時,都通過雙擊這個腳本文件來打開。

程序說明:這個腳本的基本思路是定時向記事本發送Ctrl+S這個存盤組合鍵。

第一部分:定義了腳本中需要用到的變量和對象。“AutoSaveTime”變量用來設置自動存盤間隔,單位爲毫秒,這裏設置爲5分鐘。“TXTFileName”變量通過輸入框取得你要創建的文本文件名稱。

第二部分:運行記事本,對於Windows本身提供的程序,比如計算器等,可直接在“WshShell.Run”後輸入程序名稱,如"calc",對於非系統程序,則可輸入完全路徑,但要注意使用8.3格式輸入,比如“"D:\Progra~1\Tencent\QQ.exe"”。

第三部分:這裏用SendKeys命令執行了這樣的操作流程(請注意每個操作之間延時命令的使用):在記事本中按Ctrl+S組合鍵→彈出保存文件的窗口→輸入文件名→按Alt+S組合鍵進行保存(默認保存在“我的文檔”目錄)。

第四部分:定時存盤的關鍵,通過“While……Wend”這個當條件爲“真”時循環命令,實現自動存盤代碼“WshShell.SendKeys

"^s"”和定時代碼“WScript.Sleep

AutoSaveTime”的重複執行。因爲不能讓這個定時存盤循環一直執行,退出記事本後,必須自動退出腳本並結束循環,所以設計了一個循環判斷條件“WshShell.AppActivate

TXTFileName=True”,當記事本運行中時,可以激活記事本窗口,這個條件運行結果爲“True”,定時存盤循環一直執行,退出記事本後,腳本無法激活記事本窗口,就會跳出循環,執行“Wend”後面的“WScript.Quit”退出腳本。

例四:關機菜單立刻顯身

打開記事本,輸入以下命令,並將其保存爲1.vbs:

set WshShell = CreateObject("WScript.Shell")

WshShell.SendKeys "^{ESC}u"

雙擊運行它,你會發現關機菜單立刻出現了。

將“WshShell.SendKeys "^{ESC}u"”改爲“WshShell.SendKeys "^+{ESC}"”,運行一下看看是否打開了任務管理器。


讓我們舉個例子利用SendKeys自動上網並登陸博客

將下面的腳本複製到一個文本文件中,並將其文件名命名爲:自動登陸.vbs,然後將撥號軟件及本腳本一起復制到程序——啓動項中,就可以實現自動撥號上網,並登陸到博客上。

代碼如下:

Set wshshell=CreateObject("wscript.shell")

wshshell.AppActivate "連接 MAE-301U 撥號連接"

wscript.Sleep 20000

wshshell.SendKeys "{enter}"

wshshell.Run "iexplore"

WScript.Sleep 2000

wshshell.AppActivate "hao123網址之家---實用網址,搜索大全,盡在www.hao123.com - Microsoft

Internet Explorer" ´引號中的內容修改爲你的瀏覽器打開後標題欄中的內容

wshshell.SendKeys "%d"

wshshell.SendKeys "http://passport.baidu.com/?login"

wshshell.SendKeys "{enter}"

WScript.Sleep 2000

wshshell.SendKeys "此處修改爲博客帳號"

wshshell.SendKeys "{tab}"

wshshell.SendKeys "此處修改爲博客密碼"

wshshell.SendKeys "{enter}"

◎Vbs腳本編程簡明教程之十 —— Vbs腳本編程常用的編輯器
Vbs
腳本常用的編輯器當然是notapad,不過這個編輯器的功能當然實在是太弱了一點,其實有很多的專用的腳本編輯器可以大大方便vbs腳本的編寫。我常用的有兩種:

1、VBSEDit漢化版

2、primalscript漢化版,可以對30多種腳本進行編輯


◎Vbs腳本編程簡明教程之十一 ——FSO中文件的基本操作
一、文件屬性:

在windows中,文件的屬性一般用數字來表示:

0代表normal,即普通文件未設置任何屬性。   1代表只讀文件。

2代表隱藏文件。   4代表系統文件。   16代表文件夾或目錄。

32代表存檔文件。 1024代表鏈接或快捷方式。例如:

set fs=wscript.createobject(“scripting.filesystemobject”)

set f=fs.getfile(“d:\index.txt”)

msgbox f.Attributes ‘attributes函數的作用是顯示文件屬性

需要說明的是:msgbox顯示的結果往往不是上面說明的數字,而是有關屬性代表數字的和。

二、創建文件:object.createtextfile方法,注意創建前一般需要檢查文件是否存在。

例如:set fso=wscript.createobject(“scripting.filesystemobject”)

if fso.fileexists(“c:\kk.txt”) then

msgbox “文件已存在”

else

set f=fso.createtextfile(“c:\kk.txt”)

end if

如需要強制覆蓋已存在的文件,則在文件名後加true參數。

三、複製、移動、刪除文件:使用copyfile方法、movefile方法、deletefile方法。例如:

set fso=wscript.createobject(“scripting.filesystemobject”)

fso.copyfile “c:\kk.txt”,”d:\1\kk.txt”,true   //如上文說述,true代表強制覆蓋

fso.movefile “c:\kk.txt”, “d:\” //移動文件

fso.deletefile “c:\kk.txt” //刪除文件

四、文件的讀寫:

1、打開文件:使用opentextfile方法

如:set ts=fso.opentextfile(“c:\kk.txt”,1,true)

說明:第二個參數爲訪問模式1爲只讀、2寫入、8爲追加

第三個參數指定如文件不存在則創建。

2、讀取文件:read(x)讀x個字符;readline讀一行;readall全部讀取

如:set ffile=fso.opentextfile(“c:\kk.txt”,1,true)

value=ffile.read(20)

line=ffile.readline

contents=ffile.readall

3、常見的指針變量:

atendofstream屬性:當處於文件結尾的時候這個屬性返回true。一般用循環檢測是否到達文件末尾。例如:

do while ffile.atendofstream<>true

ffile.read(10)

loop

atendofline屬性:如果已經到了行末尾,這個屬性返回true。

Column屬性(當前字符位置的列號)和line屬性(文件當前行號):在打開一個文件後,行和列指針都被設置爲1。

4、在文件中跳行:skip(x) 跳過x個字符;skipline 跳過一行

5、在文件中寫入字符:可以用2-寫入和8-追加的方式來寫入

其方法有:write(x)寫入x字符串;writeline(x)寫入x代表的一行

writeblanklines(n) 寫入n個空行

注意:最後一定要使用close方法關閉文件。讀文件後一定要關閉,才能以寫的方式打開。

◎Vbs腳本編程簡明教程之十二—使用系統對話框
在VBS腳本設計中,如果能使用windows提供的系統對話框,可以簡化腳本的使用難度,使腳本人性化許多,很少有人使用,但VBS並非不能實現這樣的功能,方法當然還是利用COM對象。

1、SAFRCFileDlg.FileSave對象:屬性有:FileName — 指定默認文件名;FileType —

指定文件擴展名;OpenFileSaveDlg — 顯示文件保存框體方法。

2、SAFRCFileDlg.FileOpen 對象:FileName — 默認文件名屬性;OpenFileOpenDlg — 顯示打開文件框體方法。

3、UserAccounts.CommonDialog對象:Filter — 擴展名屬性("vbs File|*.vbs|All Files|*.*");

FilterIndex — 指定

InitialDir — 指定默認的文件夾

FileName — 指定的文件名

Flags — 對話框的類型

Showopen方法:

很簡單,ok,讓我們來舉兩個簡單的例子:

例一:保存文件

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對象僅僅是提供了一個方便用戶選擇的界面,本身並沒有保存文件的功能,保存文件還需要使用FSO對象來完成。2、用FileType屬性來指定默認的文件類型。3、在調用OpenFileSaveDlg方法時,最好把返回值保存到一變量中,用它可以判斷用戶按下的是確定還是取消。

例二:.打開文件

set objFile = CreateObject("SAFRCFileDlg.FileOpen")

intRet = objFile.OpenFileOpenDlg

if intret then

msgbox “文件打開成功!文件名爲:” & objFile.filename

else

wscript.quit

end if

例三:比較複雜的打開文件對話框

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

說明:在腳本中加入 objDialog.Flags = &H020 看看會出現什麼結果。


◎Vbs腳本編程簡明教程之十三 —使用dictionary對象
VBS
中存在一個特殊的對象-dictionnary,是一個集合對象。一般情況霞,我把這個特殊的集合想象爲數組,可以使用其中內建的函數完成存儲和操縱數據等基本任務,無須擔心數據是在哪些行列,而是使用唯一的鍵進行訪問或者是一個只能運行在內存中的數據庫,並只有兩個字段分別是: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

這個腳本很簡單,就是定義了一個 dictionary 對象的實例sdict,並加入了三條數據,然後對每一條數據進行了枚舉,最後,將對象的實例清空。

Dictionary 對象的成員概要

屬性和說明

CompareMode    設定或返回鍵的字符串比較模式

Count     只讀。返回 Dictionary 裏的鍵/條目對的數量

Item(key) 設定或返回指定的鍵的條目值

Key(key) 設定鍵值

方法和說明

Add(key,item) 增加鍵/條目對到 Dictionary

Exists(key) 如果指定的鍵存在,返回 True,否則返回 False

Items() 返回一個包含 Dictionary 對象中所有條目的數組

Keys() 返回一個包含 Dictionary 對象中所有鍵的數組

Remove(key) 刪除一個指定的鍵/條目對

       RemoveAll()   刪除全部鍵/條目對

◎Vbs腳本編程簡明教程之十四—VBS內置函數
Abs
函數:返回數的絕對值。

Array 函數:返回含有數組的變體。

Asc 函數:返回字符串首字母的 ANSI 字符碼。

Atn 函數:返回數值的反正切。

CBool 函數:返回已被轉換爲 Boolean 子類型的變體的表達式。

CByte 函數:返回已被轉換爲字節子類型的變體的表達式。

CCur 函數:返回已被轉換爲貨幣子類型的變體的表達式。

CDate 函數:返回已被轉換爲日期子類型的變體的表達式。

CDbl 函數:返回已被轉換爲雙精度子類型的變體的表達式。

Chr 函數:返回與指定的 ANSI 字符碼相關的字符。

CInt 函數:返回已被轉換爲整形子類型的變體的表達式。

CLng 函數;返回已被轉換爲Long子類型的變體的表達式。

Cos 函數:返回角度的餘弦。

CreateObject 函數:創建並返回對“自動”對象的引用。

CSng 函數:返回已被轉換爲單精度子類型的變體的表達式。

CStr 函數:返回已被轉換爲字符串子類型的變體的表達式。

Date 函數:返回當前系統日期。

DateAdd 函數:返回的日期已經加上了指定的時間間隔。

DateDiff 函數:返回兩個日期之間的間隔。

DatePart 函數:返回給定日期的指定部分。

DateSerial 函數:返回指定年月日的日期子類型的變體。

DateValue 函數:返回日期子類型的變體。

Day 函數:返回日期,取值範圍爲 1 至 31。

Eval 函數:計算表達式並返回結果。

Exp 函數:返回 e (自然對數的底) 的多少次方。

Filter 函數:根據指定的篩選條件,返回含有字符串數組子集的、下限爲 0 的數組。

Fix 函數:返回數的整數部分。

FormatCurrency 函數:返回的表達式爲貨幣值格式,其貨幣符號採用系統控制面板中定義的。

FormatDateTime 函數:返回的表達式爲日期和時間格式。

FormatNumber 函數:返回的表達式爲數字格式。

FormatPercent 函數:返回的表達式爲百分數(乘以 100)格式,後面有 % 符號。

GetObject 函數:返回從文件對“自動”對象的引用。

GetRef 函數:返回對能夠綁定到一事件的過程的引用。

Hex 函數:返回一字符串,代表一個數的十六進制值。

Hour 函數:返回表示鐘點的數字,取值範圍爲 0 至 23。

InputBox 函數:在對話框中顯式一提示,等待用戶輸入文本或單擊按鈕,並返回文本框的內容。

InStr 函數:返回一個字符串在另一個字符串中首次出現的位置。

InStrRev 函數;返回一個字符串在另一個字符串中出現的位置,但是從字符串的尾部算起。

Int 函數:返回數的整數部分。

IsArray 函數:返回 Boolean 值,反映變量是否爲數組。

IsDate 函數:返回 Boolean 值,反映表達式能否轉換爲日期。

IsEmpty 函數:返回 Boolean 值,反映變量是否已被初始化。

IsNull 函數:返回 Boolean 值,反映表達式是否含有無效數據(Null)。

IsNumeric 函數:返回 Boolean 值,反映表達式能否轉換爲數字。

IsObject 函數:返回 Boolean 值,反映表達式是否引用了有效的“自動”對象。

Join 函數:返回通過連接許多含有數組的子串而創建的字符串。

LBound 函數;返回指定維數數組的最小有效下標。

LCase 函數:返回的字符串已被轉換爲小寫字母。

Left 函數:返回字符串最左邊的指定數量的字符。

Len 函數:返回字符串中的字符數或存儲變量所需的字節數。

LoadPicture 函數:返回圖片對象。只用於 32 位平臺。

Log 函數:返回數的自然對數。

LTrim 函數;返回去掉前導空格的字符串。

Mid 函數:從字符串中返回指定數量的字符。

Minute 函數:返回分鐘數,取值範圍爲 0 至 59。

Month 函數:返回表示月份的數,取值範圍爲 1 至 12。

MonthName 函數:返回表示月份的字符串。

MsgBox 函數:在對話框中顯示消息,等待用戶單擊按鈕,並返回表示用戶所擊按鈕的數值。

Now 函數:返回計算機的當前系統日期和時間。

Oct 函數:返回表示該數八進制數值的字符串。

Replace 函數:返回一字符串,其中指定的子串已被另一個子串替換了規定的次數。

RGB 函數:返回代表 RGB 顏色值的數字。

Right 函數:返回字符串最右邊的指定數量的字符。

Rnd 函數:返回隨機數。

Round 函數:返回指定位數、四捨五入的數。

RTrim 函數:返回去掉尾部空格的字符串副本。

ScriptEngine 函數:返回反映使用中的腳本語言的字符串。

ScriptEngineBuildVersion 函數:返回使用中的腳本引擎的編譯版本號。

ScriptEngineMajorVersion 函數:返回使用中的腳本引擎的主版本號。

ScriptEngineMinorVersion 函數:返回使用中的腳本引擎的次版本號。

Second 函數:返回秒數,取值範圍爲 0 至 59。

Sgn 函數:返回反映數的符號的整數。

Sin 函數:返回角度的正弦值。

Space 函數:返回由指定數量的空格組成的字符串。

Split 函數:返回下限爲 0 的、由指定數量的子串組成的一維數組。

Sqr 函數:返回數的平方根。

StrComp 函數:返回反映字符串比較結果的數值。

String 函數:返回指定長度的重複字符串。

StrReverse 函數:返回一字符串,其中字符的順序與指定的字符串中的順序相反。

Tan 函數:返回角度的正切值。

Time 函數:返回表示當前系統時間的“日期”子類型的“變體”。

Timer 函數:返回時經子夜 12:00 AM 後的秒數。

TimeSerial 函數:返回含有指定時分秒時間的日期子類型的變體。

TimeValue 函數:返回含有時間的日期子類型的變體。

Trim 函數:返回去掉前導空格或尾部空格的字符串副本。

TypeName 函數:返回一字符串,它提供了關於變量的變體子類型信息。

UBound 函數:返回指定維數數組的最大有效下標。

UCase 函數:返回的字符串已經被轉換爲大寫字母。

VarType 函數:返回標識變體子類型的數值。

Weekday 函數:返回表示星期幾的數值。

WeekdayName 函數:返回表示星期幾的字符串。

Year 函數:返回表示年份的數值。

◎Vbs腳本編程簡明教程之十五——響應事件

什麼是事件?在我看來,事件就象我們手機上的鬧鐘,鬧鐘一響,我們就要去做某些特定的事情。或者這樣說,事件就像警鐘,當程序運行時,有特殊的事情發生,就會激發事件,事件本身就是一條消息,如果你編寫的腳本要對事件進行處理,就需要一個特殊的過程或者函數來接受和處理事件。那麼這個特殊的過程或者函數在程序運行時,就不斷的監聽,看系統是否傳來了相應的事件,一旦接受到事件,腳本對此作出反應。

那麼事件是從那裏來的呢?是否需要我們在腳本中對事件進行編寫呢?一般情況下,事件是某個程序在運行中的特殊狀態發出的,我們不需要對事件進行編寫,只需要編寫處理事件的函數。比如說我們用vbs建立了ie的一個實例,那麼當ie的窗口被關閉的時候,就會激發出一個叫做OnQuit的事件。

是不是腳本自然而然就能接受事件並進行處理呢?我們說不是的,在創建對象的時候,我們將使用WSH的createobject命令,例如:

Set objie=Wscript.createobject(“internetexplorer.application”,”event_”)

注意到了嗎?多了一個參數,這個參數的作用是什麼呢?它叫做事件接收端,當腳本連接的對象包含事件時,如果對象調用的事件是OnBegin,那麼WSH將會在腳本中調用一個event_OnBegin的事件處理程序。當然事件接受端並不是固定的,如果對象將其定義爲MyObj_的話,那麼事件處理程序將是:MyObj_OnBegin。

是否很熟悉?在打造個性化QQ一講中,曾經出現過Window_OnSize(cx,cy)函數,它其實就是一個事件處理程序。

讓我們來舉個實際的例子完整的看看事件的處理過程:

Set objie=WScript.CreateObject("InternetExplorer.Application","event_")

objie.Visible=True

MsgBox "請關閉瀏覽器窗口看看效果!",vbSystemModal

Wscript.sleep 6000

MsgBox "現在已經正常關閉了"

Sub event_onquit()

MsgBox "您確定要關閉瀏覽器嗎?",vbSystemModal

End Sub

這段腳本打開了一個IE窗口,然後要求你關閉IE窗口,當你關閉窗口的時候,自動調用事件響應程序。

qtp測試:vbs對於文本的讀寫

'讀出文本所有內容
Function ReadTxt(pathway)

Dim fso,myfile,i
'Dim ReadLine(10)
Set fso=CreateObject("Scripting.FileSystemObject")
If fso.FileExists(pathway) Then
   Set myfile=fso.OpenTextFile(pathway,1,False)
Else
WScript.Echo "
該文檔不存在"
End If
i=0
If Not myfile.AtEndOfStream Then
   While Not myfile.AtEndOfLine
      'ReadLine(i)=myfile.ReadLine()
      'ReadLine=ReadLine&" "&myfile.ReadLine()'將所有行數據合在一起
       ReadLine=myfile.ReadAll()
   Wend

Else
ReadLine="
文件內容爲空"
End If

myfile.Close()
WScript.Echo ReadLine
End Function

'逐行寫入文本數據
Function WriteTxt(pathway,content)
Dim fso,myfile

Set fso=CreateObject("Scripting.FileSystemObject")
ON Error Resume Next
If Not fso.FileExists(pathway) Then
   fso.CreateTextFile(pathway)
End If
Set myfile=fso.OpenTextFile(pathway,8,True)
myfile.WriteLine(content)
myfile.Close()
If Err.Number<>0 Then
WScript.Echo Err.Number&Err.Description&" "&Err.Source
End if
End Function

'調用讀寫函數
Call WriteTxt("C:\Documents and Settings\Administrator\桌面\3.txt","hoho,寫入數據測試")
Call ReadTxt("C:\Documents and Settings\Administrator\桌面\3.txt")

發佈了30 篇原創文章 · 獲贊 8 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章