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.Addsheet.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 的程序。

声明:站内资源为整理优化好的代码上传分享与学习研究,如果是开源代码基本都会标明出处,方便大家扩展学习路径。请不要恶意搬运,破坏站长辛苦整理维护的劳动成果。本站为爱好者分享站点,所有内容不作为商业行为。如若本站上传内容侵犯了原著者的合法权益,请联系我们进行删除下架。