您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“vbs能調用的系統(tǒng)對象有哪些”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“vbs能調用的系統(tǒng)對象有哪些”這篇文章吧。
vbs能調用系統(tǒng)對象:
文件系統(tǒng)對象相關: ("scripting.filesystemobject")
字典相關: ("scripting.dictionary")
腳本外殼相關: ("wscript.shell")
windows外殼相關: ("shell.application")
正則表達式相關: ("vbscript.regexp")
asp相關: ("mswc.adrotator") ("mswc.nextlink") ("mswc.myinfo")
公用對話框相關: ("mscomdlg.commondialog")?
編碼與密碼相關: ("scriptpw.password")? (?"scripting.encoder"?)
郵件發(fā)送的組件相關: ("jmail.message") ("cdonts.newmail") ("cdo.configuration") ("eudora.euapplication.1") ("novellgroupwaresession")
水晶報表相關: ?("crystalruntime.application")?
ie瀏覽器相關:? ("internetexplorer.application")?
windows媒體播放相關:? ("wmplayer.ocx") ("wmplayer.ocx.7"?)
助手角色相關: ("agent.control")
ado相關: ("adodb.connection") ("adodb.command") ("adodb.recordset") ("adodb.record") ("adodb.stream") ("dao.dbengine.35") ("adox.catalog") ("adox.table")
sql相關: ("sqldmo.sqlserver") ("sqldmo.login") ("sqldmo.backup") ("sqldmo.user") ("sqldmo.backupdevice") ("sqldmo.database") ("sqldmo.restore") ("sqldmo.application") office相關: ("word.application") ("excel.application") ("powerpoint.application") ("excel.sheet") ("frontpage.application") ("access.application") ("msgraph.application") ("outlook.application")
圖像圖形相關: ("aspimage.jpeg") ("persits.jpeg") ("activeimage.images.1")? ("jsdraw.ops") ("jsiptc.jpgedit") ("gflax.gflax") ("photoshop.application")
語音朗讀相關: ("speech.voicetext") ("speech.voicetext.1") ("sapi.spvoice") ("sapi.spfilestream") ("texttospeech.texttospeech") ("texttospeech.texttospeech.1") ("activevoice.activevoice") ("activevoice.activevoice.1")
操作系統(tǒng)相關: ("jsdlgbox.browser") ("jsbin.binaryops") ("jsform.window") ("jslistvw.list") ("jssys3.ops") ("jssys3.iniedit")? ("tli.tliapplication") ("autoitx3.control") ("windowsinstaller.installer") ("virtualserver.application") ("useraccounts.commondialog") ("mosearch.gatherlog.1") ("mscomdlg.commondialog")
wmi相關: ("wbemscripting.swbemdatetime") ("wbemscripting.swbemlocator") ("wbemscripting.swbemnamedvalueset") ("wbemscripting.swbemsink",?"sink_")? ("wbemscripting.swbemrefresher") ("wbemscripting.swbemlasterror") ("wbemscripting.swbemobjectpath")
web,net相關: ("winhttp.winhttprequest") ("winhttp.winhttprequest.5.1") ("msxml2.serverxmlhttp") ("microsoft.xmlhttp") ("microsoft.xmldom") ("msxml2.xmlhttp.4.0") ("wscript.network") ("asphttp.conn") ("inetctls.inet") ("post.clspost") ("webget.web") ("netcommocx.netcomm",?"com_")? ("mswinsock.winsock") ("rcbdyctl.setting") ================================== 其他罕見的類型庫,如果你用得著,也可以列入常用庫:
消息隊列: ("msmq.msmqmessage") ("msmq.msmqqueueinfo") ("msmq.msmqquery")
索引服務: ("ixsso.query") ("ixsso.util")
信使服務: ("messenger.msgrobject") ("messenger.messengerapp") ("msnmessenger.messengerapp")
打印和傳真: ("winprint.winprintx") ("winfax.sdksend")? (faxserver.faxserver) ("fmfaxapi.application") ("oleprn.dsprintqueue.1")
數(shù)據(jù)庫會話: ("accpac.xapisession")
報表與pdf發(fā)布: ("impromptu.application.30")
條形碼與標簽: ("bartender.application")
郵件群發(fā): ("notes.notessession") ("notes.notesuiworkspace") ("notes.notesuiworkspace")
網(wǎng)絡會議: ("netmeeting.app.1")
ms編程: ("msproject.application") ("sourcesafe.0")
路由與映射: ("mappoint.application")
矢量繪圖: ("visio.application")
建模: ("rose.application")
再談CreateObject函數(shù),VBS到底能調用哪些對象?
VBS的CreateObject函數(shù)到底能夠創(chuàng)建哪些對象,幾乎是每個VBS新手都困惑的問題,他們總是熱衷于尋找“VBS對象大全”。
對象的注冊信息 HKEY_CLASSES_ROOT\CLSID\{GUID} 下可能會有這樣的一些子鍵:Control 說明該組件是一個 ActiveX 控件、Programmable 說明該組件支持自動化、Insertable 說明該組件可以被嵌入到一個 OLE 文檔容器中。能找到 Programmable,說明支持自動化,也就是支持 IDispatch 接口,所以它可以被腳本語言使用。不過這種方式比較老了,現(xiàn)在已經(jīng)被一個的組件類屬代替,即 Implemented Categories 子鍵下面的 GUID 形式的子鍵。比如 HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502},看一下 HKEY_CLASSES_ROOT\Component Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502} 下的 409 字符串值為 Automation Objects,也就是“自動化對象”。
也就是說,如果注冊表中一個對象的ProgID對應的CLSID下包含有子鍵Programmable或者Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502},那么這個對象就能用CreateObject函數(shù)創(chuàng)建。
假設上面的說法正確,那么我們可以用下面的腳本獲取“VBS對象大全”:
Option Explicit Const HKEY_CLASSES_ROOT = &H80000000 Dim arrProgID, strProgID, strCLSID Dim objReg, objFso, objFile, objShell Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv") Set objFso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") Set objFile = objFso.OpenTextFile("ProgID.txt", 2, True) 'By Demon 'http://demon.tw objReg.EnumKey HKEY_CLASSES_ROOT, "", arrProgID For Each strProgID In arrProgID If GetCLSID(strProgID, strCLSID) Then If IsProgrammable(strCLSID) Or IsAutomationObject(strCLSID) Then objFile.WriteLine strProgID End If End If Next objShell.Run "ProgID.txt" Function RegKeyExists(hKey, strSubKey) Dim a, n n = objReg.EnumKey(hKey, strSubKey, a) If n = 0 Then RegKeyExists = True Else RegKeyExists = False End If End Function Function IsAutomationObject(strCLSID) Dim strSubKey IsAutomationObject = False strSubKey = "CLSID\" & strCLSID & "\Implemented Categories" If RegKeyExists(HKEY_CLASSES_ROOT, strSubKey) Then strSubKey = strSubKey & "{40FC6ED5-2438-11CF-A3DB-080036F12502}" If RegKeyExists(HKEY_CLASSES_ROOT, strSubKey) Then IsAutomationObject = True End If End If End Function Function IsProgrammable(strCLSID) IsProgrammable = RegKeyExists(HKEY_CLASSES_ROOT, _ "CLSID\" & strCLSID & "\Programmable") End Function Function GetCLSID(strProgID, strCLSID) Dim s GetCLSID = False If RegKeyExists(HKEY_CLASSES_ROOT, strProgID & "\CLSID") Then objReg.GetStringValue HKEY_CLASSES_ROOT, strProgID & "\CLSID", "", s If Not IsNull(s) Then strCLSID = s GetCLSID = True End If End If End Function
上面的腳本顯示在我的系統(tǒng)中存在1000多個對象可以調用。哇!VBS居然可以調用那么多對象!別高興得太早,我前面說了“假設上面的說法正確”。實際上,UMU的說法并不完全正確,Programmable或者Implemented Categories為{40FC6ED5-2438-11CF-A3DB-080036F12502}的對象也不一定能夠用CreateObject創(chuàng)建,比如我系統(tǒng)中有一個ComCtl3.Band就屬于這種情況;另外,某些對象并沒有Programmable或者Implemented Categories,但是照樣可以用CreateObject創(chuàng)建,比如說WindowsInstaller.Installer。
所以不能單純依靠注冊表的是非存在Programmable或者Implemented Categories來判斷,那么如果來判斷呢?一種方法是根據(jù)《VBS技術內幕:CreateObject函數(shù)》里面說的,寫一個C++程序來模擬CreateObject函數(shù),判斷對象是否支持IDispatch接口。不過這樣太麻煩了,比較簡單的方法是讓CreateObject函數(shù)自己來判斷:
Option Explicit Const HKEY_CLASSES_ROOT = &H80000000 Dim arrProgID, strProgID, strCLSID Dim objReg, objFso, objFile, objShell, O Set objReg = GetObject("winmgmts:\\.\root\default:StdRegProv") Set objFso = CreateObject("Scripting.FileSystemObject") Set objShell = CreateObject("WScript.Shell") Set objFile = objFso.OpenTextFile("ProgID.txt", 2, True) 'By Demon 'http://demon.tw objReg.EnumKey HKEY_CLASSES_ROOT, "", arrProgID For Each strProgID In arrProgID If GetCLSID(strProgID, strCLSID) Then If IsCreatable(strProgID) Then objFile.WriteLine strProgID End If End If Next objShell.Run "ProgID.txt" Function IsCreatable(strProgID) On Error Resume Next Dim O Set O = CreateObject(strProgID) If Err.Number = 0 Then IsCreatable = True Else IsCreatable = False End If Set O = Nothing Err.Clear End Function Function RegKeyExists(hKey, strSubKey) Dim a, n n = objReg.EnumKey(hKey, strSubKey, a) If n = 0 Then RegKeyExists = True Else RegKeyExists = False End If End Function Function GetCLSID(strProgID, strCLSID) Dim s GetCLSID = False If RegKeyExists(HKEY_CLASSES_ROOT, strProgID & "\CLSID") Then objReg.GetStringValue HKEY_CLASSES_ROOT, strProgID & "\CLSID", "", s If Not IsNull(s) Then strCLSID = s GetCLSID = True End If End If End Function
說了這么多,其實我真正想說的是,就算你用上面的腳本得到了“VBS對象大全”又有什么意義呢?我敢肯定的告訴你,這些對象里面有95%以上你從來都見過,也不知道它們是做什么的,更不用說去調用。
我常用的VBS對象只有下面幾個:
ADODB.Stream
InternetExplorer.Application
Msxml2.XMLHTTP
Scripting.Dictionary
Scripting.FileSystemObject
Shell.Application
WScript.Shell
以上是“vbs能調用的系統(tǒng)對象有哪些”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。