警告: 這是一個實驗性函數(shù). 它可能無法工作, 也可能含有 BUG 或可能會修改,
如以后刪除時不會另行通知.
不要報告錯誤或請求此函數(shù)的新功能.
使用時請自行承擔風險.
基 礎 函 數(shù) 參 考
ObjCreateInterface
從給定的類名/對象指針, 接口標識符和描述字符串創(chuàng)建一個對象的引用.
參 數(shù)
CLSID |
類標識符或對象的指針. 如果是類標識符, 可以用 ProgID 或 CLSID
字符串表示形式. |
IID |
接口標識符的字符串表示形式. |
interface_description |
[可選參數(shù)] 對象的 v-table(v表) 描述字符串. 使用關鍵字的缺省訪問雙接口 IDispatch. |
flag |
[可選參數(shù)] 默認值 True, 從 IUnknown 繼承的對象接口. |
返 回 值
成功: |
返回一個對象. |
失敗: |
返回 0, 設置 @error 為非 0 值. |
備 注
ObjCreateInterface 創(chuàng)建對象, 使用 "interface-description" 字符串列出的方法.
COM 對象(基于 IUnknown)前三種方法總是 QueryInterface, AddRef 與 Release.
不要指定它們內部的描述字符串.
描述字符串列出的方法必須是 v-table(v表) 的接口順序.
如果您提供了一個無效的或不正確的描述, AutoIt 可能會變得不穩(wěn)定或崩潰.
描述字符串的格式:
$sTagInterface = "MethodName1 RetType(ParamType1;ParamType2;...);
MethodName2 RetType(..."
默認情況下, AutoIt 使用 COM 的 'stdcall' 調用約定. 要使用 'cdecl', 在返回類型后面放置
':cdecl'.
有效的類型:
類 型
|
描 述
|
none |
無值 (僅返回類型有效 - 相當于 C 語言的 void) |
byte |
無符號 8 位整數(shù) |
boolean |
無符號 8 位整數(shù) |
short |
16 位整數(shù) |
word, ushort |
無符號 16 位整數(shù) |
int, long |
32 位整數(shù) |
bool |
32 位整數(shù) |
dword, ulong, uint |
32 位無符號整數(shù) |
hresult |
32 位整數(shù) |
int64 |
64 位整數(shù) |
uint64 |
64 位無符號整數(shù) |
ptr |
一般指針 (void *) |
hwnd |
窗口句柄 (指針) |
handle |
句柄 (指針) |
float |
單精度浮點數(shù) |
double |
雙精度浮點數(shù) |
int_ptr, long_ptr, lresult, lparam |
x86 或 x64版本的 AutoIt 運行時, 一個大到足以容納指針的整數(shù). |
uint_ptr, ulong_ptr, dword_ptr, wparam |
x86 或 x64版本的 AutoIt 運行時, 一個大到足以容納指針的無符號整數(shù). |
str |
ANSI 字符串 (至少分配 65536 個字符). |
wstr |
Unicode 寬字符串 (至少分配 65536 個字符). |
bstr |
復合數(shù)據(jù)類型, 由長度前綴, 數(shù)據(jù)串和終止符組成 |
variant |
一個標簽組合, 可以用來表示任何其它數(shù)據(jù)類型 |
idispatch, object |
復合數(shù)據(jù)類型, 表示對象 IDispatch 接口 |
clsid |
128 位整數(shù)形式的 GUID 字符串 |
struct |
用于 DllStructCreate() 創(chuàng)建結構 |
* |
添加 * 到類型字符串尾端, 引用另一個類型. 例如 "int*" 傳遞一個指針到 "int" 類型. |
有關對象的更多信息見 Obj/COM 參考.
相 關 函 數(shù)
ObjCreate
函 數(shù) 示 例
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);"
;
創(chuàng)建對象.
Local
$oTaskbarList =
ObjCreateInterface($sCLSID_TaskbarList,
$sIID_ITaskbarList,
$sTagITaskbarList)
; 初始化
iTaskbarList 對象.
$oTaskbarList.HrInit()
;
運行記事本程序.
Run("notepad.exe")
; 等待記事本窗口出現(xiàn),
并獲取它的句柄.
Local
$hNotepad =
WinWait("[CLASS:Notepad]")
;
告訴用戶要尋找什么.
MsgBox(4096, "", "看任務欄看,
你應該看到一個記事本條目." & @CRLF & @CRLF & "按確定繼續(xù).")
;
從任務欄刪除記事本條目.
$oTaskbarList.DeleteTab($hNotepad)
;
告訴用戶再看看.
MsgBox(4096, "", "看看任務欄,
應該不再是一個記事本條目, 但仍在運行記事本程序." &
@CRLF &
@CRLF &
"按確定繼續(xù).")
;
關閉記事本程序.
WinClose($hNotepad)
EndFunc ; 示例 ()