我使用UFT自动化Inventor 2013如下: -
Set oApp = GetObject(,"Inventor.Application")
Set oDoc = oApp.ActiveDocument
我在这里使用GetObject()
函数来获取运行Inventor Application的参考。
但我对GetObject()
功能
1)如何发现任何应用程序存在或处于运行状态?
2)它如何访问特定应用程序的头类,以便我们访问该应用程序类的所有方法和属性?
任何人都能解释一下吗?
答案 0 :(得分:5)
GetObject
和 CreateObject
是VBScript提供的COM自动化的一部分。 VBScript无法使用Windows提供的所有COM对象。 VBScript只能使用那些公开称为程序标识符( ProgID
)的字符串的对象。虽然并非所有COM对象都具有ProgID,但所有COM对象都具有128位数字,称为类标识符或CLSID。如果COM对象具有ProgID,则可以使用VBScript实例化对象,调用其方法和属性,并销毁该对象。
GetObject
和 CreateObject
在某种程度上类似,但它们有不同的用途。
如果需要创建对象的新实例,请使用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的Application对象的新实例(即,表示Word应用程序的对象)。此GetObject调用等效于CreateObject调用
Set wordApp = CreateObject ("Word.Application")
如果省略pathname参数但保留逗号
Set wordApp = GetObject (, "Word.Application")
VBScript返回Application对象的现有实例(如果存在)。
答案 1 :(得分: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(filename,ProgID)
CLSIDFromProgID
CoCreateInstance
QueryInterface for IPersistFile interface.
Load on IPersistFile interface.
QueryInterface to get IDispatch interface.
GetObject(filename)
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(ProgID)
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 );