2015-08-31 114 views
3

我使用UFT如下自動化發明者2013 -getObject函數如何在內部工作?

Set oApp = GetObject(,"Inventor.Application") Set oDoc = oApp.ActiveDocument

這裏我使用GetObject()函數來獲取運行Inventor應用程序的參考。 但我有關於GetObject()功能的問題

1)如何找出任何應用程序存在或處於運行狀態?

2)它如何訪問特定應用程序的頭文件類,以便我們訪問該應用程序類的所有方法和屬性?

有人能解釋嗎?

+0

App Inventor的別的東西作爲Autodesk Inventor的2013年我更新標記爲你... – Taifun

回答

4

GetObjectCreateObject是由提供的VBScript COM自動化的一部分。 VBScript不能使用Windows提供的所有COM對象。 VBScript只能使用那些公開名爲編程標識符的字符串的對象(ProgID)。雖然並非所有COM對象都有一個ProgID,但所有COM對象都有一個128位的數字,稱爲類標識符或CLSID。如果COM對象具有ProgID,則可以使用VBScript來實例化對象,調用其方法和屬性並銷燬對象。

GetObjectCreateObject工作的方式相似,但它們的目的不同。
如果您需要創建對象的新實例,請使用CreateObject。
如果您需要引用對象的現有實例,請使用GetObject。

GetObject函數有兩個可選參數:object's pathname(即,完整的路徑和文件名)和object's ProgID。雖然兩個參數都是可選的,但您必須至少指定一個參數。如果您省略兩個參數,則會導致錯誤。例如:

Dim wordDoc 
Set wordDoc = GetObject ("FilePath\FileName.doc") 

當執行該代碼,以指定的路徑名​​相關聯的應用被啓動,指定文件中的對象被激活。如果pathname是一個零長度字符串(「」),GetObject將返回一個指定類型的新對象實例。如果省略pathname參數,GetObject將返回指定類型的當前活動對象。如果不存在指定類型的對象,則會發生錯誤。

如果您指定ProgID但不指定路徑名,則結果會因您設置參數的方式而有所不同。如果你在代碼中傳遞一個空字符串作爲第一個參數,如

Set wordApp = GetObject("", "Word.Application") 

VBScript中返回Word的應用程序對象的新實例(即表示Word應用程序的對象)。如果省略路徑名的說法,但離開逗號

Set wordApp = GetObject (, "Word.Application") 

如果存在的VBScript返回Application對象的現有實例這GetObject調用相當於CreateObject調用

Set wordApp = CreateObject ("Word.Application") 

欲瞭解更多信息,請thisthis鏈接。

0

您關閉錯誤檢查,嘗試GetObject,然後再測試err.number <> 0。如果發明者正在運行,該呼叫將成功,err.number將爲0,否則將是424錯誤(我認爲)。

針對GetObject的每個變體所做的API調用詳述於https://msdn.microsoft.com/en-us/library/windows/desktop/ms221192(v=vs.85).aspx

從上面的鏈接。

GetObject的(文件名,程序id)

CLSIDFromProgID 

CoCreateInstance 

QueryInterface for IPersistFile interface. 

Load on IPersistFile interface. 

QueryInterface to get IDispatch interface. 

GetObject的(文件名)

CreateBindCtx creates the bind context for the subsequent functions. 

MkParseDisplayName returns a moniker handle for BindMoniker. 

BindMoniker returns a pointer to the IDispatch interface. 

Release on moniker handle. 

Release on context. 

GetObject的(進程id)

CLSIDFromProgID 

GetActiveObject on class ID. 

QueryInterface to get IDispatch interface. 

你可以看一下每個獨立的功能調用這裏

https://msdn.microsoft.com/en-us/library/windows/desktop/ms680586(v=vs.85).aspx

EG

CLSIDFromProgID函數

中查找給定一個ProgID註冊表中的CLSID。

語法

HRESULT CLSIDFromProgID(
    _In_ LPCOLESTR lpszProgID, 
    _Out_ LPCLSID lpclsid 
); 
相關問題