欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品

主頁 > 知識庫 > VBS技術內幕:CreateObject函數詳解

VBS技術內幕:CreateObject函數詳解

熱門標簽:齊齊哈爾高德地圖標注店 佛山真人電銷機器人廠家 哪里有便宜的地圖標注公司 神行者美術館地圖標注 地圖標注政府哪個部門管 如何用機器人進行電銷 百度地圖標注點距離代碼 除了地圖標注還有這種生意嗎 東營快遞外呼系統

曾經我也不明白為什么在CreateObject函數中傳遞不同的字符串就可以創建各種各樣功能強大的對象。后來無意中看到UMU的《[UMU WSH 教程](9)CreateObject 過程》,才知道CreateObject函數創建的是COM對象,第一個參數是COM對象的ProgID。再后來拜讀了Jeff Glatt的《COM in plain C》,知道了如何用純C語言編寫COM組件。

COM(組件對象模型)是一個很復雜的概念,需要用磚頭那么厚的書才能講得清楚,而且沒有C++和面向對象編程背景的話很難理解,比較經典的書有《COM原理與應用》、《COM技術內幕》和《COM本質論》,不過貌似都絕版了。

當然,作為VBSer,我們不需要去理解COM的原理或者本質。簡單的說,COM就是別人寫好的模塊,我們要做的僅僅是調用它,而不必關心它的內部實現,這也是COM技術的一個初衷。ProgID可以認為是開發人員為COM對象起的一個名字,我們把COM對象的名字傳遞給CreateObject函數,告訴它我們想創建這個對象,CreateObject函數就會返回這個對象的指針給你。

例如我可以(當然,你也可以)用VB來編寫一個COM組件,然后給它起個名字demon.tw,那么注冊該COM組件之后,就可以用CreateObject函數來創建了:

Set blog = CreateObject("demon.tw")
blog.Open '假設我的COM對象實現了Open方法

我們常用的Scripting.FileSystemObject、WScript.Shell、ADODB.Stream等只不過是微軟開發的系統自帶的COM對象的名字罷了。

那么CreateObject函數是如何創建對象的呢?用OllyDbg跟了一下,核心的代碼大概可以分成四步:

第一步調用CLSIDFromProgIDEx從ProgID獲取對應的CLSID,如果找不到對應的CLSID,就會報錯“ActiveX 部件不能創建對象”。

我們可以用注冊表編輯器手工查找CLSID。例如要獲取WScript.Shell的CLSID,用注冊表編輯器查找HKEY_CLASSES_ROOT\WScript.Shell\CLSID的值即可。需要注意的是,《[UMU WSH 教程](9)CreateObject 過程》里說:

1、CreateObject 函數先檢查注冊表 HKEY_CLASSES_ROOT\WScript.Shell 下的子鍵 CurVer 的默認值,結果為 WScript.Shell.1,所以知道最新版本是 WScript.Shell.1;

2、讀 HKEY_CLASSES_ROOT\WScript.Shell.1,下面有一個子鍵 CLSID,默認值為 {72C24DD5-D70A-438B-8A42-98424B88AFB8};

這是錯誤的,CreateObject函數(準確的說是其內部調用的CLSIDFromProgIDEx函數)先檢查注冊表子鍵 HKEY_CLASSES_ROOT\WScript.Shell\CLSID是否存在,只要子鍵存在,即使默認值為空或者不是類標識符,都不會再檢查子鍵CurVer ,只有CLSID子鍵不存在,才會檢查子鍵 CurVer。

第二步調用CoGetClassObject函數獲取IClassFactory接口的指針,如果獲取不到,報錯“ActiveX 部件不能創建對象”或者“類不支持 Automation 操作”,也可能是其他錯誤信息,這取決于COM的實現。

第三步調用IClassFactory接口的CreateInstance方法獲取IUnknown接口指針,所有的COM都必須支持IUnknown接口,所以這步應該不會出錯。

最后調用IUnknown接口的QueryInterface方法查詢該COM是非支持IDispatch接口,只有支持IDispatch接口的COM類才能用CreateObject創建對象。如果獲取到IDispatch接口的指針,就可以給VARIANT變量賦值了;如果不支持IDispatch接口,報錯“類不支持 Automation 操作”,也可能是其他錯誤信息,取決于具體實現。

說了半天還是沒有說到一個關鍵的問題:VBS到底能調用哪些對象?或者說,哪些字符串可以作為CreateObject函數的第一個參數?欲知問題答案,請聽下回分解。

VBS深入CreateObject函數

本篇要講的是對象的創建,屬于 COM 的內容,這里不可能說太多,大家可以找一些 COM 的書看看,也可以看看 UMU 的其他關于 COM 的文章:《ATL 體驗》、《基于 WebBrowser 的新型應用程序研究小記》、《學習 ATL 的理由》、《關于 COM 的幾個概念問題》、《關于 COM 的幾個概念問題(2)》。最常見的對象有:WScript.Shell、Scripting.FileSystemObject、Scripting.Dictionary 等,這里以 WScript.Shell 為例。


馬上來看對象的創建過程,語句 Set objWSH = CreateObject( "WScript.Shell" ):

1、CreateObject 函數先檢查注冊表 HKEY_CLASSES_ROOT\WScript.Shell 下的子鍵 CurVer 的默認值,結果為 WScript.Shell.1,所以知道最新版本是 WScript.Shell.1;

2、讀 HKEY_CLASSES_ROOT\WScript.Shell.1,下面有一個子鍵 CLSID,默認值為 {72C24DD5-D70A-438B-8A42-98424B88AFB8};

3、找到了 HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8},子鍵 InProcServer32 的默認值說明服務程序是 C:\WINDOWS\system32\wshom.ocx。

4、對于腳本可以調用的 COM 對象,要使用對象里的方法 TypeLib 是必要的,HKEY_CLASSES_ROOT\CLSID\{72C24DD5-D70A-438B-8A42-98424B88AFB8} \TypeLib 的默認值是 {F935DC20-1CF0-11D0-ADB9-00C04FD58A0B},HKEY_CLASSES_ROOT\TypeLib \{F935DC20-1CF0-11D0-ADB9-00C04FD58A0B}\1.0\0\win32 的默認值說明類型庫是 C:\WINDOWS\system32\wshom.ocx。

支持腳本調用的 COM 對象必然要實現 IDispatch 接口,可以從 C:\WINDOWS\system32\wshom.ocx 的“資源 – TYPELIB”里看出來,每個對象開頭的 7 個函數都是 QueryInterface、AddRef、Release、GetTypeInfoCount、GetTypeInfo、 GetIDsOfNames、Invoke,前 3 個是 IUnknown 接口的函數。PE 文件里的 TYPELIB 資源是 *.idl 源碼文件編譯后的類型庫的二進制數據,可以反編譯回去。不過 UMU 推薦使用 eXeScope 查看,即使用 eXeScope 打開 C:\WINDOWS\system32\wshom.ocx,查看“資源 – TYPELIB”,可以看出每個接口函數的參數和返回值定義。

VB 開發環境就是這樣知道對象里有什么函數的。所以,如果我們知道一個對象名,卻不知道這個對象里有什么函數,可以用上面說的方法獲得。

xuejinglan 于 2007年03月31日 星期六 11:40 問 UMU 這樣一個問題:“系統中存在哪些對象,對象有那些函數可以調用,如何知道?”這個問題已經回答后一半了,下面回答前一半。

對象的注冊信息 HKEY_CLASSES_ROOT\CLSID\{GUID} 下可能會有這樣的一些子鍵:Control 說明該組件是一個 ActiveX 控件、Programmable 說明該組件支持自動化、Insertable 說明該組件可以被嵌入到一個 OLE 文檔容器中。能找到 Programmable,說明支持自動化,也就是支持 IDispatch 接口,所以它可以被腳本語言使用。不過這種方式比較老了,現在已經被一個的組件類屬代替,即 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,也就是“自動化對象”。

查找“自動化對象”可以使用 VS 帶的工具 oleview.exe,它專門用來查看 OLE/COM 對象的注冊信息,界面如下圖:

人民群眾可能有點頭暈了,總結一下:組件類屬為 {40FC6ED5-2438-11CF-A3DB-080036F12502}(Automation Objects) 的對象都支持被腳本調用。

接下去的創建過程不屬于腳本應該考慮的范圍,有興趣學 COM 的話可以研究研究,很好的一個機制,值得學習。標題: VBS技術內幕:CreateObject函數
作者: Demon
鏈接: http://demon.tw/reverse/vbscript-internal-createobject.html

標簽:四平 鶴壁 銅川 湖州 西安 邢臺 文山 海口

巨人網絡通訊聲明:本文標題《VBS技術內幕:CreateObject函數詳解》,本文關鍵詞  VBS,技術,內幕,CreateObject,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《VBS技術內幕:CreateObject函數詳解》相關的同類信息!
  • 本頁收集關于VBS技術內幕:CreateObject函數詳解的相關信息資訊供網民參考!
  • 推薦文章
    欧美阿v视频在线大全_亚洲欧美中文日韩V在线观看_www性欧美日韩欧美91_亚洲欧美日韩久久精品
  • <rt id="w000q"><acronym id="w000q"></acronym></rt>
  • <abbr id="w000q"></abbr>
    <rt id="w000q"></rt>
    麻豆精品视频在线观看视频| 熟女少妇一区二区三区| 在线观看天堂av| 精品久久久久久久人人人人传媒 | 精品国产伦一区二区三区免费 | 久久亚区不卡日本| 舔着乳尖日韩一区| 久久精品aⅴ无码中文字字幕重口| 色视频一区二区| 中文字幕日本不卡| 成人午夜视频网站| 日本爱爱小视频| 国产精品午夜久久| 国产精品小仙女| 97人妻精品一区二区免费| 欧美精品丝袜久久久中文字幕| 亚洲欧美日韩国产另类专区| 不卡大黄网站免费看| av女名字大全列表| 成人欧美一区二区三区黑人麻豆 | ww久久中文字幕| 蜜臀精品久久久久久蜜臀| 亚洲一区二区乱码| 欧美一级视频精品观看| 天堂va蜜桃一区二区三区漫画版| 又色又爽又黄18网站| 欧美日韩一级黄| 五月婷婷久久综合| 国产在线观看无码免费视频| 欧美sm美女调教| 久久se这里有精品| 国产精品麻豆免费版现看视频| 国产欧美一区二区精品婷婷| 国产激情视频一区二区三区欧美| 中文字幕无码日韩专区免费 | 精品成人一区二区| 国产一区二区伦理| 欧美特级一级片| 亚洲免费在线视频一区 二区| 女王人厕视频2ⅴk| 91精品国产91久久久久久一区二区| 视频一区二区中文字幕| 国产高清一区二区三区四区| 国产欧美日韩另类一区| 成人av午夜影院| 欧美四级电影在线观看| 图片区小说区区亚洲影院| 黄瓜视频污在线观看| 久久综合狠狠综合久久综合88| 国产成人无遮挡在线视频| 色偷偷成人一区二区三区91| 亚洲一区二区美女| 怡红院一区二区| 久久综合给合久久狠狠狠97色69| 国产精品自拍毛片| 色女孩综合影院| 日欧美一区二区| 亚洲综合第一区| 一区二区激情小说| 亚洲天堂久久新| 国产精品嫩草久久久久| 99久久精品国产导航| 欧美午夜理伦三级在线观看| 亚洲一卡二卡三卡四卡五卡| 久久人人爽人人爽人人片| 国产欧美精品在线观看| 成人h版在线观看| 91精品在线观看入口| 韩日av一区二区| 在线观看视频一区二区欧美日韩| 日本免费新一区视频| 亚洲一级生活片| 丝袜亚洲另类欧美| 日日操免费视频| 亚洲一区二区三区爽爽爽爽爽| 中文字幕免费视频| 亚洲人成网站在线| 国产精品扒开腿做爽爽| 亚洲麻豆国产自偷在线| 能免费看av的网站| 一个色综合网站| 美国美女黄色片| 亚洲午夜影视影院在线观看| 欧美福利第一页| 亚洲一区二区三区爽爽爽爽爽| 日本污视频网站| 亚洲无人区一区| 99成人在线观看| 日本va欧美va瓶| 欧美在线三级电影| 国产麻豆一精品一av一免费| 欧美久久婷婷综合色| 国产91色综合久久免费分享| 日韩一级免费观看| 96av麻豆蜜桃一区二区| 久久久久久久综合| 噜噜噜在线视频| 亚洲品质自拍视频网站| 美国精品一区二区| 日本亚洲最大的色成网站www| 91久久香蕉国产日韩欧美9色| 极品销魂美女一区二区三区| 宅男噜噜噜66一区二区66| 成人久久久精品乱码一区二区三区| 欧美刺激午夜性久久久久久久| 在线观看视频你懂得| 国产精品污污网站在线观看| 欧美熟妇一区二区| 亚洲成人免费在线| 色狠狠色噜噜噜综合网| 国产不卡高清在线观看视频| 精品国产麻豆免费人成网站| 亚洲精品激情视频| 亚洲黄一区二区三区| 黄色a级片在线观看| 狠狠色丁香久久婷婷综合_中| 91精品国产色综合久久ai换脸 | 女人扒开双腿让男人捅| 国产精品青草综合久久久久99| 精品国产无码在线观看| 亚洲午夜视频在线| 日本精品人妻无码77777| 久久精品噜噜噜成人av农村| 欧美一区二区三区思思人| 少妇精品无码一区二区| 一区二区三区在线视频观看 | av亚洲精华国产精华精华| 国产欧美精品区一区二区三区| 西西444www无码大胆| 婷婷综合久久一区二区三区| 欧美久久久久久久久中文字幕| 99久久精品久久久久久清纯| 国产欧美精品在线观看| 貂蝉被到爽流白浆在线观看| 国产一区不卡在线| 精品处破学生在线二十三| 蜜乳av中文字幕| 国产在线播精品第三| 久久久久久免费| 国产精品69久久久久孕妇欧美| 国产一区二区三区四区五区美女| 精品国产在天天线2019| 37p粉嫩大胆色噜噜噜| 麻豆精品一二三| 精品国产123| gv天堂gv无码男同在线观看| 国产一区二区三区免费| 日本一区二区电影| 欧美黑人性猛交xxx| 99视频精品全部免费在线| 亚洲男人的天堂av| 欧美日韩视频在线一区二区| 成人免费看片载| 亚洲午夜精品网| 欧美精品亚洲二区| 大黑人交xxx极品hd| 蜜桃av噜噜一区| 精品国产青草久久久久福利| 手机av免费看| 激情五月激情综合网| 久久久久青草大香线综合精品| 国产日韩精品中文字无码| 成人性生交大片免费看中文| 亚洲男同性视频| 宅男噜噜噜66一区二区66| 干b视频在线观看| 国产成人精品午夜视频免费| 亚洲三级在线观看| 欧美巨大另类极品videosbest| 色欲av无码一区二区三区| 国产专区欧美精品| 1024成人网色www| 欧美美女网站色| a天堂中文字幕| 成人久久18免费网站麻豆| 一区二区三区精品久久久| 日韩一区二区在线观看视频播放| 国产精品国产三级国产专业不| 国产成人在线视频网址| 久久久久久久久毛片| 成人毛片在线观看| 亚洲成人av福利| 久久久精品综合| 在线观看亚洲精品视频| 香蕉网在线播放| 成人免费毛片a| 免费看日韩精品| 亚洲精品国产无天堂网2021| 精品成人免费观看| 欧美三级电影精品| 亚洲精品自拍视频在线观看| 深田咏美中文字幕| 成人激情综合网站| 美女视频一区在线观看| 亚洲精品菠萝久久久久久久| 国产亚洲va综合人人澡精品| 欧美日韩精品一二三区| 午夜国产福利一区二区| 性の欲びの女javhd| 成熟妇人a片免费看网站|