ComObjConnect() [AHK_L 53+]

Connects the object's event sources to functions with a given prefix.

ComObjConnect(ComObject [, Prefix])

参数

ComObject

产生事件的对象.

如果对象不支持IConnectionPointContainer接口,或,无法获取对象类的类型信息,将显示一条错误信息。可通过ComObjErrortry/catch禁止或处理此错误信息。

[v1.1.22]+中,如果对象支持,使用IProvideClassInfo接口以接收此对象类的类型信息。否则,ComObjConnect尝试通过对象的IDispatch接口以接收类型信息,这可能不可靠。

Prefix

用于确定当事件发生时应调用哪个函数,此字符串为事件名称(EventName)对应的前缀(Prefix)。

如果省略,则对象为 "未连接的"; 即脚本将不再接收其事件通知.

[v1.1.01+]: 此参数可以为脚本定义的对象. 事件发生时, 会调用相应的方法. 首个参数,通常为隐式传递的参数this,其引用脚本定义的对象, 而非COM 对象。要捕获所有事件,而又不想为每个事件定义方法,可定义__Call 元函数

用法

在脚本中编写处理所需事件的函数。这类函数或“事件处理程序”具有下列结构:

前缀事件名称([参数..., ComObject])
{
    ... 处理事件的代码 ...
    return 返回值
}

前缀为用户定义;而事件名称为期望此函数响应的事件名称,定义于产生事件的对象。

参数对应于事件包含的所有参数。如果事件不含有参数,参数应完全省略。ComObject为可选,仅当参数的数目正确时;它包含了到传递给 ComObjConnect 的原始包装器(转换器)对象的引用。"ComObject"应被替换为与您脚本上下文相关的更有意义的名称。

注意,事件处理程序可以产生返回值。要返回特定的 COM 类型的值,使用ComObject(类型, 值)。例如,return ComObject(0,0)返回类型为VT_EMPTY的变量,其等效于从JavaScript函数中返回undefined(或未返回)。

调用 ComObjConnect(目标对象, "前缀")以启用事件处理.。

调用 ComObjConnect(目标对象)以断开对象(停止事件处理)。

如果参数的数目未知,可用 可变参数函数

相关

ComObjCreate, ComObjGet, ComObjActive, 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 .= "第一个参数是新的包装器对象。`n"
    if (ie == ieFinalParam)
        s .= "最后一个参数是原始包装器对象。`n"
    if ((disp1:=ComObjUnwrap(ieEventParam)) == (disp2:=ComObjUnwrap(ieFinalParam)))
        s .= "两个包装器对象均引用同一个IDispatch实例。`n"
    ObjRelease(disp1), ObjRelease(disp2)
    MsgBox % s . "完成载入" ie.Document.title " @ " url
    ie.Quit()
    ExitApp
}