- 版本 v1.1.15.01
- 指南和概述
- 常见问题(FAQ)
- 按字母排序的命令和函数索引
- AutoHotkey 脚本展示
- 变更和新功能
- 基本用法和语法
- 迁移到 AutoHotkey 1.1(AutoHotkey_L)
- 环境管理
- 本机代码互操作
- 文件、目录和磁盘管理
- Drive
- DriveGet
- DriveSpaceFree
- FileAppend
- FileCopy
- FileCopyDir
- FileCreateDir
- FileCreateShortcut
- FileDelete
- FileEncoding [AHK_L 42+]
- FileGetAttrib
- FileGetShortcut
- FileGetSize
- FileGetTime
- FileGetVersion
- FileInstall
- FileMove
- FileMoveDir
- FileOpen [AHK_L 42+]
- FileReadLine
- FileRead
- FileRecycle
- FileRecycleEmpty
- FileRemoveDir
- FileSelectFile
- FileSelectFolder
- FileSetAttrib
- FileSetTime
- IfExist / IfNotExist
- IniDelete
- IniRead
- IniWrite
- Loop(文件和文件夹)
- Loop(读取文件内容)
- SetWorkingDir
- SplitPath
- 流程控制
- 内置函数
- GUI、MsgBox、InputBox 及其他对话框
- 鼠标和键盘
- 鼠标和键盘
- #InstallKeybdHook
- #InstallMouseHook
- #KeyHistory
- BlockInput
- Click [v1.0.43+]
- ControlClick
- ControlSend / ControlSendRaw
- CoordMode
- GetKeyState
- KeyHistory
- KeyWait
- Input
- MouseClick
- MouseClickDrag
- MouseGetPos
- MouseMove
- Send / SendRaw / SendInput / SendPlay / SendEvent: 发送按键和点击
- SendLevel [v1.1.06+]
- SendMode [v1.0.43+]
- SetDefaultMouseSpeed
- SetKeyDelay
- SetMouseDelay
- SetCapsLockState/SetNumLockState/SetScrollLockState
- SetStoreCapslockMode
- 数学相关
- 屏幕管理
- 杂项命令
- 进程管理
- 注册表管理
- 声音命令
- 字符串管理
- 窗口管理
- 控件
- 窗口组
- #WinActivateForce
- DetectHiddenText
- DetectHiddenWindows
- SetTitleMatchMode
- SetWinDelay
- StatusBarGetText
- StatusBarWait
- WinActivate
- WinActivateBottom
- WinClose
- WinGet
- WinGetActiveStats
- WinGetActiveTitle
- WinGetClass
- WinGetPos
- WinGetText
- WinGetTitle
- WinHide
- WinKill
- WinMaximize
- WinMinimize
- WinMinimizeAll / WinMinimizeAllUndo
- WinMove
- WinRestore
- WinSet
- WinSetTitle
- WinShow
- WinWait
- WinWaitActive / WinWaitNotActive
- WinWaitClose
- #指令
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 }
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论