警告: 这是一个实验性函数. 它可能无法工作, 也可能含有 BUG 或可能会修改,
如以后删除时不会另行通知.
不要报告错误或请求此函数的新功能.
使用时请自行承担风险.
基 础 函 数 参 考
ObjCreateInterface
从给定的类名/对象指针, 接口标识符和描述字符串创建一个对象的引用.
参 数
CLSID |
类标识符或对象的指针. 如果是类标识符, 可以用 ProgID 或 CLSID
字符串表示形式. |
IID |
接口标识符的字符串表示形式. |
interface_description |
[可选参数] 对象的 v-table(v表) 描述字符串. 使用关键字的缺省访问双接口 IDispatch. |
flag |
[可选参数] 默认值 True, 从 IUnknown 继承的对象接口. |
返 回 值
成功: |
返回一个对象. |
失败: |
返回 0, 设置 @error 为非 0 值. |
备 注
ObjCreateInterface 创建对象, 使用 "interface-description" 字符串列出的方法.
COM 对象(基于 IUnknown)前三种方法总是 QueryInterface, AddRef 与 Release.
不要指定它们内部的描述字符串.
描述字符串列出的方法必须是 v-table(v表) 的接口顺序.
如果您提供了一个无效的或不正确的描述, AutoIt 可能会变得不稳定或崩溃.
描述字符串的格式:
$sTagInterface = "MethodName1 RetType(ParamType1;ParamType2;...);
MethodName2 RetType(..."
默认情况下, AutoIt 使用 COM 的 'stdcall' 调用约定. 要使用 'cdecl', 在返回类型后面放置
':cdecl'.
有效的类型:
类 型
|
描 述
|
none |
无值 (仅返回类型有效 - 相当于 C 语言的 void) |
byte |
无符号 8 位整数 |
boolean |
无符号 8 位整数 |
short |
16 位整数 |
word, ushort |
无符号 16 位整数 |
int, long |
32 位整数 |
bool |
32 位整数 |
dword, ulong, uint |
32 位无符号整数 |
hresult |
32 位整数 |
int64 |
64 位整数 |
uint64 |
64 位无符号整数 |
ptr |
一般指针 (void *) |
hwnd |
窗口句柄 (指针) |
handle |
句柄 (指针) |
float |
单精度浮点数 |
double |
双精度浮点数 |
int_ptr, long_ptr, lresult, lparam |
x86 或 x64版本的 AutoIt 运行时, 一个大到足以容纳指针的整数. |
uint_ptr, ulong_ptr, dword_ptr, wparam |
x86 或 x64版本的 AutoIt 运行时, 一个大到足以容纳指针的无符号整数. |
str |
ANSI 字符串 (至少分配 65536 个字符). |
wstr |
Unicode 宽字符串 (至少分配 65536 个字符). |
bstr |
复合数据类型, 由长度前缀, 数据串和终止符组成 |
variant |
一个标签组合, 可以用来表示任何其它数据类型 |
idispatch, object |
复合数据类型, 表示对象 IDispatch 接口 |
clsid |
128 位整数形式的 GUID 字符串 |
struct |
用于 DllStructCreate() 创建结构 |
* |
添加 * 到类型字符串尾端, 引用另一个类型. 例如 "int*" 传递一个指针到 "int" 类型. |
有关对象的更多信息见 Obj/COM 参考.
相 关 函 数
ObjCreate
函 数 示 例
Example()
Func Example()
; 声明
ITaskbarList 的 CLSID, IID 和接口描述.
; 对于
IUnknown 成员没有必要描述.
Local
Const $sCLSID_TaskbarList =
"{56FDF344-FD6D-11D0-958A-006097C9A090}"
Local
Const $sIID_ITaskbarList =
"{56FDF342-FD6D-11D0-958A-006097C9A090}"
Local
Const $sTagITaskbarList =
"HrInit hresult(); AddTab hresult(hwnd); DeleteTab
hresult(hwnd); ActivateTab hresult(hwnd); SetActiveAlt
hresult(hwnd);"
;
创建对象.
Local
$oTaskbarList =
ObjCreateInterface($sCLSID_TaskbarList,
$sIID_ITaskbarList,
$sTagITaskbarList)
; 初始化
iTaskbarList 对象.
$oTaskbarList.HrInit()
;
运行记事本程序.
Run("notepad.exe")
; 等待记事本窗口出现,
并获取它的句柄.
Local
$hNotepad =
WinWait("[CLASS:Notepad]")
;
告诉用户要寻找什么.
MsgBox(4096, "", "看任务栏看,
你应该看到一个记事本条目." & @CRLF & @CRLF & "按确定继续.")
;
从任务栏删除记事本条目.
$oTaskbarList.DeleteTab($hNotepad)
;
告诉用户再看看.
MsgBox(4096, "", "看看任务栏,
应该不再是一个记事本条目, 但仍在运行记事本程序." &
@CRLF &
@CRLF &
"按确定继续.")
;
关闭记事本程序.
WinClose($hNotepad)
EndFunc ; 示例 ()