警告:此函数是实验性的. 可能无法正常工作, 也可能包含错误. 如以后被修改或删除, 恕不另行通知.
不要报告此函数的错误或请求新的功能.
ObjCreateInterface
从给定的类名/对象指针, 接口标识符和描述字符串创建一个对象的引用.
ObjCreateInterface ( "CLSID" , "IID" [, "interface_description",[flag = True]] )
参数
CLSID
|
类标识符或对象的指针. 如果是类标识符, 可以用 ProgID 或 CLSID 字符串表示形式.
|
IID
|
接口标识符的字符串表示形式.
|
interface_description
|
[可选] 对象的 v-table(v表) 描述字符串. 使用关键字的缺省访问双接口 IDispatch.
|
flag
|
[可选] 默认值 True, 从 IUnknown 继承的对象接口.
|
返回值
成功:
|
返回一个对象.
|
失败:
|
@error 设置 为非 0 值.
|
备注
ObjCreateInterface() 创建对象和方法, 在接口描述字符串中列出.
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
函数示例
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Declare the CLSID, IID and interface description for ITaskbarList.
; It is not necessary to describe the members of 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);"
; Create the object.
Local $oTaskbarList = ObjCreateInterface($sCLSID_TaskbarList, $sIID_ITaskbarList, $sTagITaskbarList)
; Initialize the iTaskbarList object.
$oTaskbarList.HrInit()
; Run Notepad.
Run("notepad.exe")
; Wait for the Notepad window to appear and get a handle to it.
Local $hNotepad = WinWait("[CLASS:Notepad]")
; Tell the user what to look for.
MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar and you should see an entry for Notepad." & @CRLF & @CRLF & "Press OK to continue.")
; Delete the Notepad entry from the Taskbar.
$oTaskbarList.DeleteTab($hNotepad)
; Tell the user to look again.
MsgBox($MB_SYSTEMMODAL, "", "Look in the Taskbar. There should no longer be a Notepad entry but Notepad is still running." & @CRLF & @CRLF & "Press OK to continue.")
; Close Notepad.
WinClose($hNotepad)
EndFunc ;==>Example
----------------------------------------
|