COM 是 Windows 上一套很重要的自动化接口。对 AHK 来说,COM 最大的价值是:它可以直接调用软件暴露出来的对象、属性和方法,而不是靠鼠标点击、键盘模拟去“猜界面”。
Excel、Word 这类 Office 软件非常适合用 COM 操作。浏览器方面,传统 IE/WebBrowser 控件也支持 COM;现代 Chrome、Edge 的常规网页自动化则更常用 Chrome.ahk、Selenium、JS 注入或 HTTP 请求。理解 COM 的核心原理,能帮助你判断什么时候该用对象接口,什么时候不该硬点界面。
一、COM 不是模拟点击
模拟点击是“操作界面”,COM 是“操作对象”。比如你想把 Excel 的 A1 写成某个值,用 COM 可以直接对单元格赋值,不需要先激活窗口、点到单元格、再输入文字。
#Requires AutoHotkey v1.1
#NoEnv
#SingleInstance Force
xl := ComObjCreate("Excel.Application")
xl.Visible := True
wb := xl.Workbooks.Add
sheet := wb.Worksheets(1)
sheet.Range("A1").Value := "姓名"
sheet.Range("B1").Value := "分数"
sheet.Range("A2").Value := "小明"
sheet.Range("B2").Value := 95
MsgBox, 已写入 Excel
这段代码没有按键、没有坐标,也不依赖 Excel 窗口是否在最前面。只要 COM 对象可用,脚本就可以直接操作工作簿和单元格。
二、对象、属性、方法
COM 代码里经常会看到点号:xl.Workbooks.Add、sheet.Range("A1").Value。可以粗略理解为:对象下面有属性和方法。
- 对象:Excel 程序、工作簿、工作表、单元格。
- 属性:Visible、Value、Name、Count。
- 方法:Add、Open、SaveAs、Quit。
新手不要一开始就背对象模型,先学会读懂这三层关系,再遇到需求时查对应软件的对象文档。
三、连接已经打开的 Excel
ComObjCreate 是新建一个程序对象,ComObjActive 则是连接已经运行的程序。做办公自动化时,这个区别很重要。
try
xl := ComObjActive("Excel.Application")
catch
{
MsgBox, 没有找到已打开的 Excel
return
}
cellValue := xl.ActiveSheet.Range("A1").Value
MsgBox, A1 内容是:%cellValue%
如果你要处理用户当前打开的表格,通常用 ComObjActive。如果你要脚本自己新建一份报表,通常用 ComObjCreate。
四、Word 自动化示例
Word 的思路和 Excel 类似,只是对象模型不同。下面示例新建 Word 文档,并写入一段文字。
word := ComObjCreate("Word.Application")
word.Visible := True
doc := word.Documents.Add()
word.Selection.TypeText("这是 AHK 通过 COM 写入的 Word 内容。")
word.Selection.TypeParagraph()
word.Selection.TypeText("比模拟键盘输入更稳定。")
如果只是批量生成合同、报告、模板文档,COM 通常比前台操作稳定得多,也更容易排查。
五、浏览器 COM 要分清时代
很多老教程会用 IE 的 COM 对象控制网页,这能帮助理解浏览器对象模型,但不建议把它当成现代浏览器自动化的主力方案。
ie := ComObjCreate("InternetExplorer.Application")
ie.Visible := True
ie.Navigate("https://www.ahk66.com")
while (ie.Busy || ie.readyState != 4)
Sleep, 100
MsgBox, % ie.document.title
ie.Quit()
现在做 Chrome、Edge 自动化,通常要根据需求选择 Chrome.ahk、Selenium、JS 注入或 HTTP 请求。COM 的核心思想仍然有价值,但浏览器具体方案要跟着目标软件变化。
六、COM 代码最该检查什么
- 目标软件是否安装,并且版本支持对应对象。
- 是要新建对象,还是连接已打开对象。
- 脚本结束时是否需要保存、关闭、Quit。
- 对象路径是否写对,例如工作簿、工作表、范围。
- 失败时是否有 try/catch 或 ErrorLevel 检查。
COM 的优势是稳定、直接、后台能力强;缺点是需要理解目标软件对象模型。新手可以从 Excel 的 Range、Workbook、Worksheet 开始练,再扩展到 Word 和其他支持 COM 的程序。

评论(0)