目录
[1. 前言](#1. 前言)
[2. 我的使用环境](#2. 我的使用环境)
[3. 安装 AutoHotkey](#3. 安装 AutoHotkey)
[4. AutoHotkey 的安装位置](#4. AutoHotkey 的安装位置)
[5. 使用 Window Spy 获取鼠标坐标](#5. 使用 Window Spy 获取鼠标坐标)
[6. 编写第一个 AutoHotkey 脚本](#6. 编写第一个 AutoHotkey 脚本)
[7. 手动测试 AutoHotkey 脚本](#7. 手动测试 AutoHotkey 脚本)
[8. 使用 Windows 任务计划程序定时执行](#8. 使用 Windows 任务计划程序定时执行)
[9. 设置任务"常规"](#9. 设置任务“常规”)
[10. 设置触发时间](#10. 设置触发时间)
[11. 设置任务"操作"](#11. 设置任务“操作”)
[12. 总结](#12. 总结)
1. 前言
最近在使用 VS Code 中的 Codex 插件执行一个持续时间比较长的项目任务时,遇到了一个比较实际的问题。
Codex 在工作一段时间后可能会达到当前使用额度,此时界面会提示类似:
You are out of Codex messages
Your rate limit resets at ...
也就是说,需要等待额度在指定时间恢复后才能继续。
如果恢复时间刚好在凌晨,例如:
2026/09/13 02:09
显然没有必要专门等到凌晨再手动打开电脑、点击输入框、输入:
项目继续工作
然后再点击发送。
因此我希望实现这样一个自动化流程:
到达指定时间
↓
Windows 自动执行脚本
↓
切换到 VS Code
↓
点击 Codex 输入框
↓
自动输入"项目继续工作"
↓
点击发送按钮
↓
Codex 继续之前的任务
最终我采用的方案是:
Windows 任务计划程序 + AutoHotkey v2。
这种方法不需要修改 Codex 插件,也不需要在远程 Ubuntu 服务器中额外安装 Codex CLI,本质上就是让 Windows 在指定时间模拟一次人工鼠标和键盘操作。
【此处插入图片 1:Codex 额度耗尽的界面截图】
2. 我的使用环境
本文使用的环境为:
Windows 11
VS Code
VS Code Remote SSH
Codex 插件
AutoHotkey v2
Windows 任务计划程序
我的 VS Code 本地运行在 Windows 中,但是实际项目通过 Remote SSH 连接远程 Ubuntu 服务器。
也就是说:
Windows
│
├── VS Code
│ │
│ ├── Codex
│ │
│ └── Remote SSH
│ │
│ └── Ubuntu服务器
这里有一个重要特点:
Codex 的操作界面本身仍然位于 Windows 桌面中。
所以,与其在 Ubuntu 服务器里想办法控制 VS Code 插件,不如直接在 Windows 桌面端模拟鼠标点击。
3. 安装 AutoHotkey
AutoHotkey 是 Windows 下非常常见的自动化工具,可以模拟:
鼠标点击
键盘输入
窗口切换
快捷键
剪贴板操作
本文使用的是:
AutoHotkey v2
(1)可以通过 winget 安装:
winget install --id AutoHotkey.AutoHotkey -e
如果已经安装过,可能会看到:
找到已安装的现有包。正在尝试升级已安装的包...
找不到可用的升级。
配置的源中没有可用的较新的包版本。
这说明 AutoHotkey 已经安装,并不需要再次安装。
(2)网址安装
下载网址:AutoHotkey

4. AutoHotkey 的安装位置
安装的时候注意一下AutoHotkey 的安装位置,默认的是
C:\Program Files\AutoHotkey\v2\AutoHotkey64.exe
我安装的是E:\Program Files\AutoHotkey\v2\AutoHotkey64.exe
5. 使用 Window Spy 获取鼠标坐标
AutoHotkey 自带一个非常实用的工具:
Window Spy
打开 Window Spy 后,把鼠标移动到目标位置,就可以看到:
Screen
Window
Client
等不同坐标。
因为脚本中已经指定:
CoordMode "Mouse", "Screen"
所以我们需要使用:
Screen
对应的坐标。
例如,我把鼠标放到 Codex 输入框中时,Window Spy 显示:
Screen: 1320, 878
因此我的输入框坐标就是:
INPUT_X := 1320
INPUT_Y := 878
如图:

6. 编写第一个 AutoHotkey 脚本
我首先实现一个最简单的功能:
自动激活 VS Code,然后点击 Codex 的发送按钮。
在桌面创建个txt文件,后续填入内容后重命名如下:
codex_continue.ahk
我的实际路径是(我的桌面是E:\Desktop):
E:\Desktop\codex_continue.ahk
内容如下(按自己的需求情况修改codex输入框和发送按钮的xy):
#Requires AutoHotkey v2.0
; 使用屏幕绝对坐标
CoordMode "Mouse", "Screen"
; =========================
; 坐标
; =========================
; Codex 输入框
INPUT_X := 1320
INPUT_Y := 878
; Codex 发送按钮
SEND_X := 1878
SEND_Y := 915
; 自动发送的内容
MESSAGE := "项目继续工作"
; =========================
; 找到 VS Code
; =========================
if !WinExist("ahk_exe Code.exe")
{
MsgBox "没有找到 VS Code,任务终止。"
ExitApp
}
; =========================
; 激活 VS Code
; =========================
WinActivate "ahk_exe Code.exe"
if !WinWaitActive("ahk_exe Code.exe",, 10)
{
MsgBox "VS Code 无法激活,任务终止。"
ExitApp
}
; 等待界面稳定
Sleep 3000
; =========================
; 点击 Codex 输入框
; =========================
Click INPUT_X, INPUT_Y
Sleep 700
; =========================
; 清空输入框
; =========================
Send "^a"
Sleep 300
; =========================
; 输入"项目继续工作"
; 使用剪贴板避免中文输入问题
; =========================
OldClipboard := ClipboardAll()
A_Clipboard := MESSAGE
Sleep 300
Send "^v"
Sleep 1200
; =========================
; 点击发送按钮
; =========================
Click SEND_X, SEND_Y
Sleep 500
; =========================
; 恢复原剪贴板
; =========================
A_Clipboard := OldClipboard
ExitApp
7. 手动测试 AutoHotkey 脚本
在创建定时任务之前,一定要先测试 .ahk 本身。
首先保持:
VS Code 已打开
Codex 面板已打开
窗口布局保持不变
然后双击:
codex_continue.ahk
正常情况下应该看到:
VS Code 自动切换到前台
↓
鼠标点击 Codex 输入框
↓
自动出现"项目继续工作"
↓
自动点击发送按钮
为了第一次测试更加直观,也可以临时把:
Click SEND_X, SEND_Y
修改为:
MouseMove SEND_X, SEND_Y, 20
Sleep 3000
Click
这样鼠标会慢慢移动到发送按钮,然后等待 3 秒再点击。
便于检查坐标是否正确。
测试成功后,再恢复成:
Click SEND_X, SEND_Y
【此处插入图片 6:AutoHotkey 自动输入"项目继续工作"后的截图】
8. 使用 Windows 任务计划程序定时执行
脚本运行正常后,就可以让 Windows 在指定时间自动启动它。
按:
Win + R
输入:
taskschd.msc
进入:
任务计划程序
这里建议不要使用:
创建基本任务
而是直接使用:
创建任务
因为后者可以配置更完整的运行条件。

9. 设置任务"常规"
任务名称可以写:
Codex额度恢复后继续
我选择:
只在用户登录时运行
这一项很重要。
因为 AutoHotkey 需要操作真实的:
Windows桌面
鼠标
VS Code窗口
如果选择:
无论用户是否登录都要运行
任务可能运行在后台 Session 中,此时 AutoHotkey 无法正常操作桌面。
也可以勾选:
使用最高权限运行

10. 设置触发时间
进入:
触发器
点击:
新建
根据需求选择:
一次
然后设置运行时间。
例如 Codex 提示额度:
02:09 后恢复
我不会直接设置:
02:09
而是稍微留出一点同步时间,例如:
02:11
避免 Codex 后台额度刚到时间但服务器状态还没有完全刷新。

11. 设置任务"操作"
这一部分是整个配置中最容易出错的地方。
进入:
操作
→ 新建
→ 启动程序
我的设置如下。
程序或脚本:
E:\Program Files\AutoHotkey\v2\AutoHotkey64.exe
添加参数:
"E:\Desktop\codex_continue.ahk"
起始于:
E:\Desktop
这里的逻辑其实就是:
Windows任务计划程序
↓
AutoHotkey64.exe
↓
执行 codex_continue.ahk
而不是让 Windows 任务计划程序直接执行:
codex_continue.ahk

12. 总结
整个方案实际上并不复杂,核心只有两个工具:
AutoHotkey
+
Windows任务计划程序
AutoHotkey 负责:
窗口切换
鼠标点击
键盘输入
剪贴板操作
Windows 任务计划程序负责:
在指定时间启动 AutoHotkey
最终实现:
Codex额度耗尽
↓
等待额度自动恢复
↓
无需人工值守
↓
Windows定时启动脚本
↓
自动输入"项目继续工作"
↓
Codex继续执行项目
对于需要让 AI Coding Agent 长时间执行实验、代码修改、论文整理等任务的场景,这种方式还是比较实用的。