ComObjType() [v1.0.91+]
从 COM 对象获取类型信息.
VarType := ComObjType(ComObject) Name := ComObjType(ComObject, "Name") IID := ComObjType(ComObject, "IID") Class := ComObjType(ComObject, "Class") ; v1.1.26+ CLSID := ComObjType(ComObject, "CLSID") ; v1.1.26+
参数
- ComObject
包含 COM 对象或类型化值的包装器对象.
- 参数2
第二个参数是指示返回的类型信息的字符串.
返回值
返回值依赖于参数2 的值:
参数2 | 返回值 |
---|---|
省略 | 整数变量类型码,其指示了 COM 包装器对象包含的值的类型. |
"Name" | 对象默认接口的名称. |
"IID" | 对象默认接口的全局唯一标识符 (GUID) . |
"Class" | [v1.1.26+]: 对象的类名. 请注意,Class 与 Prog ID 是不一样的 (Prog ID 是一个在系统注册表或 ComObjCreate 中用于识别的类名称). |
"CLSID" | [v1.1.26+]: 对象的类的全局唯一标示符 (GUID) . 类经常以 CLSID 的形式注册,位于HKCR\CLSID 注册表键下. |
如果参数无效或指定的类型信息无法取回, 则返回空字符串.
变量类型的常量值
VT_EMPTY = 0 ; 没有值 VT_NULL = 1 ; SQL 风格的空值 VT_I2 = 2 ; 16 位有符号整数 VT_I4 = 3 ; 32 位有符号整数 VT_R4 = 4 ; 32 位浮点数 VT_R8 = 5 ; 64 位浮点数 VT_CY = 6 ; 货币 VT_DATE = 7 ; 日期 VT_BSTR = 8 ; COM 字符串(带长度前缀的 Unicode 字符串) VT_DISPATCH = 9 ; COM 对象 VT_ERROR = 0xA ; 错误代码(32 位整数) VT_BOOL = 0xB ; 布尔值真(-1)或假(0) VT_VARIANT = 0xC ; VARIANT (必须与 VT_ARRAY 或 VT_BYREF 组合使用) VT_UNKNOWN = 0xD ; IUnknown 接口指针 VT_DECIMAL = 0xE ; (不支持) VT_I1 = 0x10 ; 8 位有符号整数 VT_UI1 = 0x11 ; 8 位无符号整数 VT_UI2 = 0x12 ; 16 位无符号整数 VT_UI4 = 0x13 ; 32 位无符号整数 VT_I8 = 0x14 ; 64 位有符号整数 VT_UI8 = 0x15 ; 64 位无符号整数 VT_INT = 0x16 ; 有符号机器整数 VT_UINT = 0x17 ; 无符号机器整数 VT_RECORD = 0x24 ; 用户定义类型 - 不支持 VT_ARRAY = 0x2000 ; SAFEARRAY (安全数组) VT_BYREF = 0x4000 ; 到另一种值的指针 /* VT_ARRAY / VT_BYREF 与另一个值组合使用 (使用按位 "或"), 以表示最终的类型.例如, 0x2003 表示 32 位有符号整数的 SAFEARRAY (安全数组), 而 0x400C 表示到 VARIANT 的指针. */
一般说明
在通常情况下, COM 对象的方法或属性的返回值会被转换成 AutoHotkey 支持的适合的数据类型. 没有明确处理的类型通过 VariantChangeType 强制转换成字符串; 如果转换失败或变量类型包含 VT_ARRAY 或 VT_BYREF 标志, 则返回包含此值和其类型的对象.
对于任意变量 x, 如果 ComObjType(x)
返回整数, 则 x 包含 COM 对象包装器.
如果 参数2 是 "Name" 或 "IID", 类型信息是通过 IDispatch::GetTypeInfo 接口方法取回的. ComObject的变量类型必须是 VT_DISPATCH.
如果 参数2 是 "Class" 或 "CLSID", 类型信息是通过 IProvideClassInfo::GetClassInfo 接口方法取回的. ComObject的变量类型必须是 VT_DISPATCH 或 VT_UNKNOWN, 并且对象必须执行 iprovideclassinfo 接口 (一些对象不需要).
相关
ComObjValue, ComObjCreate, ComObjGet, ComObjActive
示例
d := ComObjCreate("Scripting.Dictionary") VarType := ComObjType(d) ; 对于可脚本化对象总为 9. Name := ComObjType(d, "Name") ;仅对于可脚本化对象有效. IID := ComObjType(d, "IID") ; 同上. CName := ComObjType(d, "Class") ; v1.1.26+ CLSID := ComObjType(d, "CLSID") ; v1.1.26+ MsgBox 变量类型:`t%VarType%`n名称:`t%Name%`nIID:`t%IID%`n类名:`t%CName%`n类标识符 (CLSID):`t%CLSID%