ComObjConnect() [AHK_L 53+]
连接对象的事件源到带有给定前缀的函数.
ComObjConnect(ComObject [, Prefix])
参数
- ComObject
产生事件的对象.
- Prefix
-
用于确定当事件发生时应调用哪个函数的的事件名称前缀的字符串.
如果省略, 那么对象为 "未连接的"; 即脚本将不再接收其事件通告.
[v1.1.01+]: 此参数可以为脚本定义的对象. 事件发生时, 会调用相应的方法. 首个参数, 通常为隐藏的
this
参数, 引用脚本定义的对象, 而不是 COM 对象. 要不为每个事件定义方法而捕获所有事件, 请定义 __Call 元函数.
用法
要让 ComObjConnect 有意义, 首先您必须在脚本中编写处理任何感兴趣事件的函数. 这类函数或 "事件处理程序" 具有下列结构:
PrefixEventName([Params..., ComObject]) { ... 处理事件的代码 ... return returnValue }
Prefix 为您选择的前缀, 而 EventName 为函数需要处理的每种事件的名称.
Params 对应于事件包含的所有参数. 如果事件不含有参数, Params 应该完全省略. ComObject 是可选的, 并且可以在定义的 Params 数目正确时才使用; 它包含了到传递给 ComObjConnect 的原始包装器对象的引用. "ComObject" 应该替换为与您脚本上下文相关的更有意义的名称.
注意事件处理程序可以产生返回值. 要返回特定的 COM 类型的值, 请使用 ComObjParameter, 它也可以写成 ComObjRetVal(type, value)
或简化成 ComObj(type, value)
.
调用 ComObjConnect(yourObject, "Prefix")
来启用事件处理.
调用 ComObjConnect(yourObject)
来断开到对象的连接 (停止处理事件).
如果参数的数目未知, 那么可以使用 可变参数函数.
相关
ComObjCreate, ComObjGet, ComObjActive, ComObjConnect, ComObjError, WScript.ConnectObject (MSDN)
示例
ie := ComObjCreate("InternetExplorer.Application") ; 把事件连接到带“IE_”前缀的脚本函数。 ComObjConnect(ie, "IE_") ie.Visible := true ; 已知此语句在IE7上无法正常执行。 ie.Navigate("http://ahkscript.org/") #Persistent IE_DocumentComplete(ieEventParam, url, ieFinalParam) { global ie if (ie != ieEventParam) s .= "First parameter is a new wrapper object.`n" if (ie == ieFinalParam) s .= "Final parameter is the original wrapper object.`n" if ((disp1:=ComObjUnwrap(ieEventParam)) == (disp2:=ComObjUnwrap(ieFinalParam))) s .= "Both wrapper objects refer to the same IDispatch instance.`n" ObjRelease(disp1), ObjRelease(disp2) MsgBox % s . "Finished loading " ie.Document.title " @ " url ie.Quit() ExitApp }