欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

COM 擴(kuò)展到 AutoIt

簡(jiǎn)短介紹

什么是 COM?

COM 是 "Component Object Model"(對(duì)象組件模塊)的縮寫(xiě).是微軟為應(yīng)用程序的相互連接建立的一種公共接口.

這些接口定義為 COM 對(duì)象(Object).

使用 COM 之前, 必須知道程序與它的'接口'是如何精確地執(zhí)行銜接的. 使用 COM,您現(xiàn)在可以“對(duì)話”指定的對(duì)象.

唯一的事情是必須了解這些對(duì)象(Objects)的名稱(chēng)"name"、屬性'properties' 或方法'methods'.

 

什么是對(duì)象(Object)的屬性或方法?

這是對(duì)象(Object)兩個(gè)最基本的特征. 屬性'property'保存對(duì)象包含的數(shù)據(jù).

方法'method'是調(diào)用對(duì)象內(nèi)部函數(shù)完成數(shù)據(jù)處理(執(zhí)行某事件).

需要在 AutoIt 腳本中使用 COM 嗎?

視情況而定. AutoIt 有許多內(nèi)建函數(shù)和一個(gè)極大的 UDF 庫(kù). 你可以使用它們做出你編程的大部分.

如果你需要特別的'接口'連接到其它程序, 使用 COM 可以幫助您節(jié)省很多腳本代碼行.

編寫(xiě)腳本必須知道, COM 對(duì)象很大程度上取決于操作系統(tǒng)和已安裝的軟件.

下面的例子已經(jīng)在安裝有 Microsoft Office 2000 的 Windows XP 專(zhuān)業(yè)版上通過(guò)測(cè)試.

AutoIt 使用 COM 的例子

要最小化所有打開(kāi)的窗口. 可使用常規(guī) AutoIt 函數(shù),如 WinList 與 WinSetState.

但 COM 的兩行代碼就能得到同樣的效果:

$oShell = ObjCreate("shell.application")

$oShell.MinimizeAll

提示: 此例不是最短的腳本,你可以使用 WinMinimizeAll()函數(shù)最小化所有窗口

 

第一行, 創(chuàng)建一個(gè)名叫 "shell.application" 的對(duì)象. 這是 Windows 的內(nèi)部對(duì)象, 定義在 shell32.dll 文件中.

新對(duì)象的指針?lè)峙浣o變量 $oShell. 現(xiàn)在 $oShell 就是對(duì)象變量.

第二行, 使用 oShell 調(diào)用 " MinimizeAll" 的方法最小化所有窗口.

 

所有 Windows 系統(tǒng)都有一個(gè)巨大的內(nèi)部對(duì)象庫(kù)為不同用途簡(jiǎn)化操作.

一些應(yīng)用程序,例如 Excel 或者 Word 同樣也有自己的對(duì)象庫(kù).  

有時(shí)要獲得你系統(tǒng)存在的所有對(duì)象的屬性和方法是非常困難的.

搜索 Microsoft.com 或者 Google.com,可以幫助您找到一些關(guān)于您想使用的 Object 的線索.

例如, 可以在這里找到關(guān)于 "shell.application" 對(duì)象的一些信息:
http://msdn.microsoft.com/en-us/library/bb774094.aspx


要查看當(dāng)前安裝在計(jì)算機(jī)系統(tǒng)上面的所有對(duì)象,

"OLE/COM Object Viewer "(OLE/COM 對(duì)象查看器)是一個(gè)相當(dāng)有用的工具

這個(gè)工具將在下面單獨(dú)的章節(jié)中解釋。

 

再看一個(gè)例子. 如要獲取某個(gè) HTML 網(wǎng)頁(yè)的源代碼. 可以使用內(nèi)置 InetGet() 函數(shù)保存網(wǎng)頁(yè)文件,

再用 FileRead() 來(lái)讀取內(nèi)容. 但以下代碼也能達(dá)到相同的結(jié)果:

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open("GET","http://www.AutoItScript.com")
$oHTTP.Send()
$HTMLSource = $oHTTP.Responsetext

變量 $HTMLSource 現(xiàn)在包含了AutoItScript.com 主頁(yè)完整的 HTML 源代碼(即頂層 HTML 框架).

關(guān)于 "winhttp.winhttprequest" 對(duì)象的相關(guān)信息可以在這里得到:
http://msdn.microsoft.com/en-us/library/aa384106.aspx )

 

請(qǐng)記住這一點(diǎn):對(duì)象依賴(lài)于計(jì)算機(jī)的操作系統(tǒng)或者已經(jīng)安裝的程序.

例如: winhttp.winhttprequest.5.1 對(duì)象僅存在于至少安裝有 Explorer version 5 的計(jì)算機(jī)中. 

共享腳本使用 COM 對(duì)象, 要確保其它計(jì)算機(jī)上也存在這些 COM 對(duì)象

 

對(duì)象變量的表現(xiàn)有點(diǎn)不同于其他類(lèi)型的 AutoIt 變量.

對(duì)象不是一個(gè)真實(shí)的值, 而是指向腳本外部某事的一個(gè)'指針'.

因此不能執(zhí)行運(yùn)算, 也不是的等式. 當(dāng)你分配對(duì)象變量不同的值時(shí),'指針'將會(huì)自動(dòng)被釋放.

例如, 給對(duì)象指定任何數(shù)字值或任何文本值強(qiáng)制刪除對(duì)象:

$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")  ; 創(chuàng)建對(duì)象
$oHTTP=0                                          ; 刪除對(duì)象 

當(dāng)腳本執(zhí)行完成, 不需要?jiǎng)h除對(duì)象變量.腳本退出時(shí), AutoIt 會(huì)釋放由腳本創(chuàng)建的所有活動(dòng)對(duì)象.

當(dāng)函數(shù)內(nèi)定義一個(gè)局部對(duì)象變量,函數(shù)以返回結(jié)束時(shí),也同樣會(huì)釋放對(duì)象.

 

使用 COM 進(jìn)行自動(dòng)化操作

一個(gè)非常受歡迎的 COM 應(yīng)用是"自動(dòng)化"程序編制,代替常規(guī)的 Autoit 操作函數(shù),如:Send() 或者 WinActivate().

您可以利用那些程序內(nèi)部定義的對(duì)象. 下面是"自動(dòng)化"操作 Microsoft Excel 的例子:

$oExcel = ObjCreate("Excel.Application")                   ; 創(chuàng)建 Excel 對(duì)象
$oExcel.Visible = 1                                        ; 顯示 Excel
$oExcel.WorkBooks.Add                                      ; 添加新工作表
$oExcel.ActiveWorkBook.ActiveSheet.Cells(1,1).Value="測(cè)試" ; 將 "測(cè)試" 寫(xiě)入第一行、第一列
sleep(4000)                                                ; 等待 4 秒看結(jié)果
$oExcel.ActiveWorkBook.Saved = 1                           ; 模擬保存工作表
$oExcel.Quit                                               ; 退出 Excel 

控制其它程序的復(fù)雜性取決于具體方案, 而不是由 AutoIt 腳本決定.

如果某事件不能如預(yù)期的運(yùn)行,可能需要參考應(yīng)用程序的文檔資料,而不是看 AutoIt 幫助

 

專(zhuān)用語(yǔ)句

AutoIt 為 COM 應(yīng)用設(shè)計(jì)了二個(gè)特別的語(yǔ)句:

WITH/ENDWITH 語(yǔ)句與 FOR/IN/NEXT 循環(huán)語(yǔ)句.

WITH..ENDWITH 語(yǔ)句

WITH/ENDWITH 語(yǔ)句并不增加新的功能,但它能使你的腳本更容易閱讀.

例如上面使用 Excel 的范例還可以寫(xiě)成:

$oExcel = ObjCreate("Excel.Application")                ; 創(chuàng)建 Excel 對(duì)象

WITH $oExcel
    .Visible = 1                                        ; 顯示 Excel
    .WorkBooks.Add                                      ; 添加新表
    .ActiveWorkBook.ActiveSheet.Cells(1,1).Value="測(cè)試" ; 將 "測(cè)試" 寫(xiě)入第一行、第一列
    sleep(4000)                                         ; 等待 4 秒看結(jié)果
    .ActiveWorkBook.Saved = 1                           ; 模擬保存工作表
    .Quit                                               ; 退出 Excel
ENDWITH

這個(gè)例子沒(méi)有節(jié)省文本行, 但當(dāng)你引用對(duì)象屬性/方法的語(yǔ)句較長(zhǎng)時(shí),你可以用 WITH 語(yǔ)句縮短過(guò)長(zhǎng)的語(yǔ)句行

FOR..IN 循環(huán)語(yǔ)句

The FOR...IN 循環(huán)必需使用(Collections)集合.集合(Collections)是一個(gè)特定類(lèi)型的對(duì)象, 它存在多個(gè)子對(duì)象.

您可以把它們看成一個(gè)數(shù)組. (實(shí)際上, FOR..IN 語(yǔ)句也能在數(shù)組類(lèi)型的變量上工作)

 

使用數(shù)組的 FOR..IN 循環(huán)

下面是演示 FOR..IN 循環(huán)的例子. 使用正常的 AutoIt 數(shù)組, 與 COM 無(wú)關(guān). 只是給你說(shuō)說(shuō)大概原理

$String = ""               ; 一個(gè)為顯示目的字符串

$aArray[0]="a"             ; 定義數(shù)組
$aArray[1]=0               ; 用幾個(gè)
$aArray[2]=1.3434          ; 不同的
$aArray[3]="testestestest" ; 實(shí)例值.

FOR $Element IN $aArray    ; 從這里開(kāi)始...
   $String = $String & $Element & @CRLF
NEXT

; 顯示用戶(hù)的結(jié)果
Msgbox(0,"For..IN 數(shù)組測(cè)試","結(jié)果: " & @CRLF & $String)

 

使用對(duì)象的 FOR..IN 循環(huán)

大部份情形下,不能使用'標(biāo)準(zhǔn)'對(duì)象方法取回(collection)集合的元素.

對(duì)于 'COM',必須'枚舉'它們. 這是 FOR..IN 循環(huán)的特點(diǎn).

下面的 Excel 例子在當(dāng)前激活的工作表的 A1:O16 單元格范圍內(nèi)循環(huán)填寫(xiě)數(shù)字.

如果單元格內(nèi)有小于 5 的數(shù)值,將替換為 0 值:

$oExcel = ObjCreate("Excel.Application") ; 創(chuàng)建 Excel 對(duì)象

$oExcel.Visible = 1               ; 顯示 Excel
$oExcel.WorkBooks.Add             ; 添加新表

dim $arr[16][16]                  ; 這些腳本行
for $i = 0 to 15                  ; 只是創(chuàng)建
  for $j =  0 to 15               ; 工作表的
   $arr[$i][$j] = $i              ; 單元格
  next                            ; 數(shù)據(jù)的示例.
next

$oExcel.activesheet.range("A1:O16").value = $arr ; 將上面的數(shù)字填入工作表的("A1:O16")表格中

sleep(2000)                       ; 等待 2 秒,然后再繼續(xù)

For $cell in $oExcel.ActiveSheet.Range("A1:O16")
   If $cell.Value < 5 Then
       $cell.Value = 0
   Endif
Next

$oExcel.ActiveWorkBook.Saved = 1 ; 模擬保存工作表
sleep(2000)                      ; 等待 2 秒,然后再繼續(xù)
$oExcel.Quit                     ; 退出 Excel

  

COM 高級(jí)應(yīng)用

下面這些是使用 AutoItCOM 必須了解的知識(shí)( COM 事件和 COM 錯(cuò)誤處理).

如果你是 COM 程序員新手, 請(qǐng)先閱讀一些關(guān)于 COM 的好文章.

有個(gè)關(guān)于 COM 的經(jīng)典著作叫做 "Inside OLE 2",作者:Kraig Brockschmidt (微軟出版).

您可以在網(wǎng)上找到更多關(guān)于 COM 的資源 (不是與 AutoIt 有關(guān)的):

http://msdn.microsoft.com/en-us/library/ms694363.aspx

http://www.garybeene.com/vb/tut-obj.htm (關(guān)于 Visual Basic 對(duì)象)

http://java.sun.com/docs/books/tutorial/java/concepts/     (在 Java 中使用對(duì)象)

http://msdn.microsoft.com/archive/en-us/dnarguion/html/drgui082399.asp ( C++ 事件對(duì)象)

http://www.garybeene.com/vb/tut-err.htm (Visual Basic 錯(cuò)誤處理)

 

COM 事件

標(biāo)準(zhǔn) COM 自動(dòng)化主要使用單向通訊.

當(dāng)你訪問(wèn)對(duì)象的屬性或產(chǎn)生的方法時(shí), 只要你的腳本適合它, COM 對(duì)象就能響應(yīng)你的訪問(wèn).

在你需要等候一些 COM 的動(dòng)作發(fā)生時(shí),這就非常便利了.

如果要知道對(duì)象某事件是否已經(jīng)發(fā)生,你可以讓對(duì)象在你的腳本中調(diào)用特定的 UDF, 而不必寫(xiě)一些循環(huán)語(yǔ)句.

同時(shí)你還可以在你的腳本中做其他的事.

不是所有對(duì)象都支持事件. 你必須仔細(xì)閱讀對(duì)象文檔資料確定對(duì)象是否支持事件.

如果支持事件, 則必須知道它支持的事件類(lèi)型. AutoItCOM 只能接收'發(fā)送'類(lèi)型事件.

最后你必須知道對(duì)象產(chǎn)生事件的名稱(chēng),包括他們的自變量(如果有的話).

只有當(dāng)你知道了所有這些信息,你才能開(kāi)始編寫(xiě)使用 COM 事件的 AutoIt 腳本.

下面是一個(gè)接收因特網(wǎng)瀏覽器事件示范腳本中的一段:

$oIE=ObjCreate("InternetExplorer.Application.1")   ; 創(chuàng)建 Internet Explorer 對(duì)象

$EventObject=ObjEvent($oIE,"IEEvent_","DWebBrowserEvents")  ; 啟動(dòng)接收事件.

$oIE.url= "http://www.autoitscript.com"  ; 加載示例網(wǎng)頁(yè)
;從這里開(kāi)始,$oIE 對(duì)象在網(wǎng)頁(yè)加載期間產(chǎn)生事件.
;它們的事件處理在下面顯示的函數(shù)內(nèi).

;在這里寫(xiě)等待用戶(hù)退出腳本的語(yǔ)句.
...(你的代碼在這里)... 

$EventObject.stop            ; 告訴 IE 要停止接收事件
$EventObject=0               ; 消除對(duì)象事件
$oIE.quit                    ; 退出 IE
$oIE=0                       ; 移除內(nèi)存中的 IE 信息(不是必需的)
Exit                         ; 退出主腳本


; 一些 Internet Explorer 的事件函數(shù).
;
; 對(duì)于 IE 事件的完整動(dòng)作列表, 見(jiàn)下面 MSDN 網(wǎng)頁(yè)瀏覽器文檔資料:
http://msdn.microsoft.com/en-us/library/system.windows.forms.webbrowser.aspx

Func IEEvent_StatusTextChange($Text)
; 在完整腳本中(見(jiàn)下面的鏈接),用一個(gè) GUI 來(lái)顯示內(nèi)容.
    GUICtrlSetData ( $GUIEdit, "瀏覽器狀態(tài)更改為: " & $Text & @CRLF, "添加" )
EndFunc

Func IEEvent_BeforeNavigate($URL, $Flags, $TargetFrameName, $PostData, $Headers, $Cancel)
; 在完整腳本中(見(jiàn)下面的鏈接),用一個(gè) GUI 來(lái)顯示內(nèi)容.
; 注意: 內(nèi)容與 MSDN 不同.
  GUICtrlSetData ( $GUIEdit, "導(dǎo)航: " & $URL & " 標(biāo)記: " & $Flags & @CRLF, "添加")
EndFunc

點(diǎn)擊這里 查看上例的完整腳本.

 

這個(gè)腳本的主干是: $EventObject=ObjEvent($oIE,"IEEvent_",...).
這個(gè)函數(shù)需要對(duì)象 $oIE, 并變更從 MYEvent_ 開(kāi)始的 AutoIt 函數(shù)事件名及路徑.

第三個(gè)參數(shù)是可選的. 當(dāng)對(duì)象有多個(gè)事件接口,而且你不想讓 AutoIt 自動(dòng)選擇時(shí), 可以使用第三個(gè)參數(shù).

導(dǎo)致對(duì)象連續(xù)變更路徑的是 $EventObject.這個(gè)變量不需要過(guò)多注意, 除非你想要停止事件.

停止變更路徑事件, 你不能僅僅已類(lèi)似 $EventObject="" 的形式刪除變量.

理由是那 '調(diào)用' 對(duì)象仍然正在占用這個(gè)變量的索引, 而且不會(huì)釋放它,直到對(duì)象本身退出為止.

你可以借由殺死(killing) '調(diào)用'對(duì)象來(lái)解決這個(gè)問(wèn)題,

也可以使用 $EventObject.Stop 告訴對(duì)象你不再需要接收任何事件.

然后你才可以 (也不是真的必需) 通過(guò)分配它一個(gè)任意數(shù)值取消事件, 類(lèi)似: $EventObject=""

 

如果你知道事件 $oIE 的激活名稱(chēng), 通過(guò)IE名字創(chuàng)建 AutoIt UDF:Event_Eventname(可選參數(shù))實(shí)現(xiàn)你感興趣的事件.
請(qǐng)務(wù)必確定函數(shù)中自變量的正確數(shù)目,并保證其正確的順序規(guī)定. 否則你可能以料想不到的意外值作為結(jié)束. 

如果你不知道 (因?yàn)橐恍├碛? 事件的名字, 你可以增加一個(gè)只有前綴的 UDF,
例如: Func IEEvent_($Eventname).

當(dāng)接收事件且沒(méi)有 IEEvent_ Eventname UDF 存在時(shí), 函數(shù)將調(diào)用代替變量 $Eventname 內(nèi)的事件名稱(chēng).

不一定要執(zhí)行所有事件函數(shù),那些不執(zhí)行的將被忽略

更多使用 COM 事件函數(shù)的例子腳本在 AutoIt 3.1.1.xx beta ZIP 發(fā)布文檔中,

從這里下載: http://www.autoitscript.com/autoit3/files/beta/autoit/COM/

 

AutoIt 中 COM 事件的限制

一些對(duì)象 (像 'Web 瀏覽器') 將自變量傳遞給他們的事件函數(shù) '作為參照'.

這是為了讓用戶(hù)改變這些函數(shù)中的自變量,并且把它返回到對(duì)象.

然而,AutoIt 使用它自己的變量系統(tǒng),對(duì) COM 變量不是兼容的.

這意謂著所有對(duì)象值將轉(zhuǎn)換成 AutoIt 變量, 因而也失去了參照原有的內(nèi)存空間.

也許在不久的將來(lái),我們可以解決這個(gè)限制 !

COM 出錯(cuò)處理

使用 COM 沒(méi)有適當(dāng)?shù)腻e(cuò)誤處理是非常棘手的. 尤其是當(dāng)你不熟悉您腳本中的對(duì)象時(shí).

當(dāng)偵測(cè)到一個(gè)COM錯(cuò)誤時(shí),AutoIt 腳本將立即停止執(zhí)行. 這是默認(rèn)設(shè)置,也是最安全的設(shè)置.

在這種情況下,你必須采取措施,以防止錯(cuò)誤在您的腳本中發(fā)生.

如果沒(méi)有方法避免 COM 差錯(cuò), 你可以在腳本中安裝一個(gè)"差錯(cuò)處理程序", 但如果這個(gè)程序被執(zhí)行,表明錯(cuò)誤已經(jīng)發(fā)生.

要使腳本正常工作,這不是一個(gè)完美的解決辦法,也不能捕捉非 COM 相關(guān)的腳本錯(cuò)誤(如申明和語(yǔ)法錯(cuò)誤).

使用 ObjEvent() 和一個(gè)用戶(hù)自定義 COM 事件函數(shù),把差錯(cuò)處理作為 COM 的正常事件是可行的.

唯一的差別是使用一個(gè)固定對(duì)象事件名:" AutoIt.Error". 見(jiàn)示例:

Global $g_eventerror = 0  ; 如果檢查 COM 錯(cuò)誤發(fā)生. 檢查處理后必須復(fù)位.

$oMyError = ObjEvent("AutoIt.Error","MyErrFunc") ; 建立客戶(hù)錯(cuò)誤處理程序

; 這里執(zhí)行一個(gè)預(yù)設(shè)故障(對(duì)象不存在)
$oIE = ObjCreate("InternetExplorer.Application")
$oIE.visible = 1
$oIE.bogus
if $g_eventerror then Msgbox(0,"","前一行有一個(gè)錯(cuò)誤.")

Exit


; 這是我(編者)自定義的錯(cuò)誤處理程序
Func MyErrFunc()
   $HexNumber=hex($oMyError.number,8)
   Msgbox(0,"","截獲一個(gè) COM 錯(cuò)誤 !" & @CRLF & _
                "錯(cuò)誤代碼: " & $HexNumber & @CRLF & _
                "錯(cuò)誤描述: " & $oMyError.windescription )

   $g_eventerror = 1 ; 函數(shù)返回
Endfunc

 

有一個(gè)特別有關(guān)錯(cuò)誤事件處理程序的情況, 即它返回的對(duì)象. 這是 AutoIt 錯(cuò)誤對(duì)象,其中包含了一些有用的屬性和方法. 它的執(zhí)行部分是基于VB(腳本)中的“Err”對(duì)象:

AutoIt 錯(cuò)誤對(duì)象的屬性:

.number   窗口 HRESULT 的值來(lái)自 COM 調(diào)用
.windescription FormatWinError() 錯(cuò)誤文本來(lái)自 .number
.source  對(duì)象產(chǎn)生錯(cuò)誤的名稱(chēng) (內(nèi)容來(lái)自 ExcepInfo.source)
.description 源對(duì)象錯(cuò)誤描述 (內(nèi)容來(lái)自 ExcepInfo.description)
.helpfile 源對(duì)象 helpfile 錯(cuò)誤 (內(nèi)容來(lái)自 ExcepInfo.helpfile)
.helpcontext 源對(duì)象 helpfile 環(huán)境 ID 編號(hào) (內(nèi)容來(lái)自 ExcepInfo.helpcontext)
.lastdllerror GetLastError() 的返回?cái)?shù)
.scriptline 發(fā)生錯(cuò)誤的腳本行

AutoIt 錯(cuò)誤對(duì)象的處理方法:

.raise 引發(fā)錯(cuò)誤的情況下,由用戶(hù)啟動(dòng)
.clear  清除錯(cuò)誤對(duì)象的內(nèi)容 (即設(shè)置為 0 值, 字符串設(shè)置為 "")

 

編寫(xiě) UDF 程序的一個(gè)注意

在 AutoIt 腳本中, 您最多只能激活一個(gè)錯(cuò)誤事件處理程序. 如果你正在編寫(xiě)包含 COM 函數(shù)的 UDF, 可以檢查用戶(hù)是否安裝有錯(cuò)誤處理程序.

您可以這樣檢查:

$sFuncName = ObjEvent("AutoIt.Error")
if $sFuncName <> "" then Msgbox (0,"提示","用戶(hù)已經(jīng)安裝了錯(cuò)誤處理函數(shù): " & $sFuncName)

如果沒(méi)有錯(cuò)誤處理程序是激活的,可以暫時(shí)安裝自己的 UDF 調(diào)用.

但是, 在沒(méi)有釋放被指定的變量時(shí),你不能停止現(xiàn)有的錯(cuò)誤處理程序. 如果腳本作者已安裝 COM 錯(cuò)誤處理程序,

他的職責(zé)是使用一個(gè)適當(dāng)?shù)暮瘮?shù)找出由 UDF 產(chǎn)生的 COM 錯(cuò)誤.

 

OLE/COM 對(duì)象查看器

"OLE/COM Object Viewer"(OLE/COM 對(duì)象查看器)查看你系統(tǒng)上安裝的所有 COM 對(duì)象時(shí),是一個(gè)非常便利的工具.

它是 Windows 2000 資源套件的一部份,并且能從下面地址免費(fèi)下載: http://www.microsoft.com/downloads/details.aspx?familyid=5233b70d-d9b2-4cb5-aeb6-45664be858b6&displaylang=en

這個(gè)程序的安裝有有點(diǎn)兒尷尬.它不為你產(chǎn)生任何啟動(dòng)菜單圖標(biāo).

執(zhí)行文件 oleview.exe 安裝在 C:\Program Files\Resource 套件目錄中.(默認(rèn)安裝).

當(dāng)運(yùn)行 oleview.exe 時(shí),一些系統(tǒng)將會(huì)提示找不到 iviewers.dll 文件. 這是個(gè)必須的文件,

奇怪的是不包含在最新安裝之中.你可以從下面地址獲得一個(gè) oleview.exe 較舊版本: http://download.microsoft.com/download/2/f/1/2f15a59b-6cd7-467b-8ff2-f162c3932235/ovi386.exe

它將默認(rèn)安裝到 C:\MSTOOLS\BIN 目錄.你只需將文件 iviewer.dll 復(fù)制到 oleview.exe 所在目錄,

然后使用命令行注冊(cè)DLL: regsvr32 iviewers.dll.

中文版 autoit3 將 oleview.exe 文件安裝在:E:\autoit3\Extras\OLEview 文件夾中(默認(rèn)安裝),同時(shí)已存在必須的 iviewers.dll 文件.

 

讓我們用 Oleviewer 做一個(gè)例子. 運(yùn)行 oleview.exe 依次展開(kāi):

Object Classes->Grouped by Component Category->Control->Microsoft Web Browser.

 

在左側(cè)欄中你可以看到為對(duì)象定義的所有 COM 接口. 我們稍后討論這些.

仔細(xì)看看右欄. 它包含在 AutoIt 腳本中使用這個(gè)對(duì)象的許多信息. 最重要的是 "VersionIndependentProgID".

這是一個(gè)在 ObjCreate, ObjGet 或 ObjEvent 函數(shù)中使用的名字. 此外它還包含對(duì)象的目錄和文件名. 這可能是 EXE, DLL 或 OCX 文件.

InProcServer32 意味著您的腳本與對(duì)象運(yùn)行在同一線程(進(jìn)程).

當(dāng)您見(jiàn)到 LocalServer32, 表示對(duì)象作為單獨(dú)的進(jìn)程運(yùn)行. 該對(duì)象還必須包含一個(gè)類(lèi)型庫(kù) ("TypeLib=" 之后的行), 否則無(wú)法使用在 AutoIt 腳本中.

 

左側(cè)列中的接口用于與對(duì)象交互的不同方法. 有些用來(lái)做儲(chǔ)存 (IStorage, IPersist), 其它的嵌入 GUI (IOleObject, IOleControl).

AutoIt 使用 IDispatch 作為自動(dòng)化接口. 這個(gè)接口'暴露' 該對(duì)象支持腳本的全部方法和屬性.

如果它不存在,則無(wú)法在一個(gè) AutoIt 腳本中使用對(duì)象.

讓我們來(lái)看看在這個(gè)界面. 右鍵單擊 IDispatch 名稱(chēng)并在右鍵菜單選擇 "View...". 然后單擊"View TypeInfo..." 按鈕. 

(注意: 如果這個(gè)按鈕是灰色的,表示你沒(méi)有注冊(cè) iviewers.dll 文件,或?qū)ο鬀](méi)有這個(gè)類(lèi)型庫(kù))

"ITypeInfo Viewer" 窗口僅顯示該對(duì)象提供的信息. 如果開(kāi)發(fā)者沒(méi)有包括幫助文件,你只能看到方法/屬性的名稱(chēng)而沒(méi)有其他信息.

"Microsoft Web Browser" 類(lèi)型庫(kù)內(nèi)容相當(dāng)廣泛. 在左邊列中點(diǎn)擊一個(gè)項(xiàng)目,該項(xiàng)目的描述將會(huì)在右邊顯示.

有時(shí)你必須瀏覽 "Inherited Interfaces" 為對(duì)象檢索更多的方法.

描述方法/屬性的語(yǔ)法是 C/C++ 樣式. 

屬性描述為 "HRESULT Resizable([in] VARIANT_BOOL pbOffline)", 必須在 AutoIt 重寫(xiě)為:  $Resizable=$Object.Resizable 

($Object 保存對(duì)象創(chuàng)建的 ObjCreate 或 ObjGet).

常用術(shù)語(yǔ)

以下這些術(shù)語(yǔ)通常與 COM 一起混和使用, 但是有不同的意義: 

OOP = 面向?qū)ο缶幊? 把可重復(fù)使用的軟件組件構(gòu)建成模塊并稱(chēng)為對(duì)象.

DDE = 動(dòng)態(tài)數(shù)據(jù)交換. 可以說(shuō)這是 COM 的前身. 在不同的應(yīng)用程序之間使用 IPC 傳遞命令信息.

OLE = 對(duì)象鏈接和嵌入. 第一個(gè)版本是 DDE 的擴(kuò)充版本. 從一個(gè)程序 '嵌套' 數(shù)據(jù)到另外一個(gè)程序. 目前的 OLE 建立在 COM 之上,并且成為 ActiveX 的一部分

Automation = 操作另一個(gè)應(yīng)用程序?qū)ο蟮姆椒? 用在 OLE, ActiveX 與 COM 中.

ActiveX = OLE 的下一代自動(dòng)操作裝置, 起先主要用于開(kāi)發(fā)網(wǎng)絡(luò)應(yīng)用之間的接口(尤其是 web 瀏覽器). 建立在 COM 之上.

DCOM= 分布式 COM. 一個(gè)略有修改的 COM, 它能夠溝通不同的物理計(jì)算機(jī).

.NET (dot Net)= 不是一個(gè)真正的軟件, 但微軟的 '概念' 認(rèn)為,這是互連網(wǎng)“一切動(dòng)作”通過(guò)的軟件. "dot Net" 主要用于網(wǎng)絡(luò)服務(wù).

COMmunist = 這個(gè)不支持 COM, 但有什么人信奉 communism (一種理論認(rèn)為,普通老百姓應(yīng)該擁有自己所有的財(cái)產(chǎn)). ( 譯注:此處牛頭不對(duì)馬嘴!或是幽默,或是尋開(kāi)心....總之不知為何?最后那個(gè)詞就不翻譯了!).

 

provider with jb51.net (unicode)