警告: 这是一个实验性函数. 它可能无法工作, 也可能含有 BUG 或可能会修改, 如以后删除时不会另行通知.

不要报告错误或请求此函数的新功能.

使用时请自行承担风险.

基 础 函 数 参 考


ObjCreateInterface

从给定的类名/对象指针, 接口标识符和描述字符串创建一个对象的引用.

ObjCreateInterface ( "CLSID" , "IID" [,"interface_description", ["flag"]] )

参 数

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 ; 示例 ()

provider with jb51.net (unicode)