VSC
过去在 Codex 中自动生成图片,通常需要调用 imagegen skill。
这个codex生图最开始还好,后面安全审核变得越来越严还慢,用过得懂得都懂。
新版 ChatGPT 桌面 App 已经合并 Codex,Chat、Work 和 Codex 可以在同一个应用中使用。OpenAI 官方公告
因此,可以通过系统级 UI 自动化控制 ChatGPT Quick Chat:
提示词
→ 系统脚本
→ 打开 ChatGPT Quick Chat
→ 粘贴提示词
→ 按回车
→ ChatGPT 生成图片
这套方案不会关闭或绕过 ChatGPT 的安全审核。它解决的是“如何自动提交提示词”,ChatGPT 自身的内容政策、生成限制和账户额度依然有效。
整个流程只有四步:
macOS 使用 AppleScript 和 System Events。
Windows 使用 PowerShell 和 WScript.Shell.SendKeys。
提示词作为变量传入脚本,因此可以来自:
开始之前需要满足以下条件:
新版统一桌面 App 的默认 Quick Chat 快捷键为:
macOS:Command + Option + N
Windows:Ctrl + Alt + N
快捷键可以在 ChatGPT 设置中查看或修改。ChatGPT 桌面命令说明
部分旧版 Windows ChatGPT App 使用 Alt + Space 打开 Companion Window,后面的 Windows 脚本也提供了兼容选项。
建议将脚本放在:
~/Scripts/ChatGPT/send-chatgpt.applescript
先创建目录:
mkdir -p "$HOME/Scripts/ChatGPT"
然后创建文件:
/Users/你的用户名/Scripts/ChatGPT/send-chatgpt.applescript
使用纯文本编辑器打开,把下面的代码完整粘贴进去:
on run argv
if (count of argv) = 0 then error "请传入 Prompt"
set promptText to item 1 of argv
set shouldSend to false
if (count of argv) > 1 then
set shouldSend to (item 2 of argv is "send")
end if
set oldClipboard to the clipboard
try
-- 将 Prompt 临时放入剪贴板
set the clipboard to promptText
-- 启动并激活 ChatGPT
tell application "ChatGPT" to activate
delay 0.5
tell application "System Events"
-- 打开 Quick Chat
keystroke "n" using {command down, option down}
delay 1
-- 确认当前前台应用是 ChatGPT
set frontAppName to name of first application process whose frontmost is true
if frontAppName is not "ChatGPT" then
error "ChatGPT 未成为前台应用,停止执行"
end if
-- 粘贴 Prompt
keystroke "v" using {command down}
delay 0.3
-- 第二个参数为 send 时,自动按回车
if shouldSend then
key code 36
end if
end tell
delay 0.5
-- 恢复原来的剪贴板内容
set the clipboard to oldClipboard
on error errMsg number errNum
set the clipboard to oldClipboard
error errMsg number errNum
end try
end run
AppleScript 要模拟键盘操作,需要获得 macOS 辅助功能权限。
打开:
系统设置
→ 隐私与安全性
→ 辅助功能
根据实际执行方式,允许以下程序:
Terminal
iTerm
ChatGPT
第一次运行时,系统还可能询问 Terminal 是否可以控制 System Events 或 ChatGPT,选择允许即可。
先运行:
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "这是一次自动化测试"
正常情况下,脚本会:
确认提示词进入了正确的聊天框,再测试自动发送。
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "生成一张蓝晒航海图风格的角色设定图" send
最后的 send 表示粘贴完成后自动按回车。
如果去掉 send,脚本只负责填充,最终由用户确认后发送。
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" '沙漠狐族游侠角色设定角色设计,太空牛仔礼服,太空牛仔、银色领绳、沾尘靴,航海蓝晒照片,蓝晒照片、航海图、白色轮廓、日光显影,姿态有表现力,面部清晰,1-2个关键配饰,在披风下摆的织物徽章上自然融入 VibeShotClub 字样' send
这条命令执行后,系统会自动打开 Quick Chat、填入提示词并提交。
直接把提示词写进命令适合测试。正式使用时,建议把提示词保存为变量。
PROMPT='沙漠狐族游侠角色设定角色设计,太空牛仔礼服,太空牛仔、银色领绳、沾尘靴,航海蓝晒照片,蓝晒照片、航海图、白色轮廓、日光显影,姿态有表现力,面部清晰,1-2个关键配饰,在披风下摆的织物徽章上自然融入 VibeShotClub 字样'
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "$PROMPT" send
系统脚本并不关心提示词从哪里来,只要最终把完整文本放进 $PROMPT 即可。
假设提示词保存在:
/Users/你的用户名/Documents/AIGC/提示词库/prompts/001.txt
可以这样读取:
PROMPT_FILE="/Users/你的用户名/Documents/AIGC/提示词库/prompts/001.txt"
PROMPT="$(<"$PROMPT_FILE")"
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "$PROMPT" send
使用文件的优点是:
建议将脚本放在:
%USERPROFILE%\Scripts\ChatGPT\send-chatgpt.ps1
在 PowerShell 中创建目录:
New-Item `
-ItemType Directory `
-Force `
-Path "$HOME\Scripts\ChatGPT"
创建文件:
C:\Users\你的用户名\Scripts\ChatGPT\send-chatgpt.ps1
把下面代码完整保存进去:
param(
[Parameter(Mandatory = $true)]
[string]$Prompt,
[switch]$Send,
[switch]$ClassicCompanion
)
$ErrorActionPreference = "Stop"
# 保存当前文本剪贴板
$OldClipboard = Get-Clipboard -Raw -ErrorAction SilentlyContinue
if ($null -eq $OldClipboard) {
$OldClipboard = ""
}
try {
# 将 Prompt 放入剪贴板
Set-Clipboard -Value $Prompt
# 创建键盘自动化对象
$Shell = New-Object -ComObject WScript.Shell
# 优先通过 ChatGPT 主窗口进程激活
$ChatGPTProcess = Get-Process `
-Name "ChatGPT" `
-ErrorAction SilentlyContinue |
Where-Object { $_.MainWindowHandle -ne 0 } |
Select-Object -First 1
if ($ChatGPTProcess) {
$Activated = $Shell.AppActivate($ChatGPTProcess.Id)
}
else {
$Activated = $Shell.AppActivate("ChatGPT")
}
if (-not $Activated) {
throw "ChatGPT is not running or no ChatGPT window was found."
}
Start-Sleep -Milliseconds 500
if ($ClassicCompanion) {
# 旧版 ChatGPT Companion Window:Alt + Space
$Shell.SendKeys("%{SPACE}")
}
else {
# 新版统一 ChatGPT/Codex App:Ctrl + Alt + N
$Shell.SendKeys("^%n")
}
Start-Sleep -Milliseconds 1000
# 粘贴 Prompt
$Shell.SendKeys("^v")
Start-Sleep -Milliseconds 300
# 可选:自动发送
if ($Send) {
$Shell.SendKeys("{ENTER}")
}
Start-Sleep -Milliseconds 500
}
finally {
# 恢复原来的文本剪贴板
Set-Clipboard -Value $OldClipboard
}
在 WScript.Shell.SendKeys 中:
^ 代表 Ctrl
% 代表 Alt
因此:
$Shell.SendKeys("^%n")
等于:
Ctrl + Alt + N
确保 ChatGPT 已经打开,然后执行:
powershell.exe `
-NoProfile `
-ExecutionPolicy Bypass `
-File "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" `
-Prompt "这是一次自动化测试"
脚本会打开 Quick Chat 并填入内容,但不会发送。
powershell.exe `
-NoProfile `
-ExecutionPolicy Bypass `
-File "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" `
-Prompt "生成一张蓝晒航海图风格的角色设定图" `
-Send
部分旧版 Windows ChatGPT App 使用 Alt + Space 打开 Companion Window。ChatGPT Windows App 文档
这时运行:
powershell.exe `
-NoProfile `
-ExecutionPolicy Bypass `
-File "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" `
-Prompt "生成一张蓝晒航海图风格的角色设定图" `
-Send `
-ClassicCompanion
如果不确定自己使用哪种快捷键,可以在 ChatGPT 的键盘快捷键设置中确认。
$Prompt = "沙漠狐族游侠角色设定角色设计,太空牛仔礼服,太空牛仔、银色领绳、沾尘靴,航海蓝晒照片,蓝晒照片、航海图、白色轮廓、日光显影,姿态有表现力,面部清晰,1-2个关键配饰,在披风下摆的织物徽章上自然融入 VibeShotClub 字样"
& "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" `
-Prompt $Prompt `
-Send
$PromptFile = "$HOME\Documents\AIGC\提示词库\prompts\001.txt"
$Prompt = Get-Content `
-LiteralPath $PromptFile `
-Raw `
-Encoding UTF8
& "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" `
-Prompt $Prompt `
-Send
Get-Content -Raw 会把整个文件作为一个字符串读取,可以保留多行提示词。
Quick Chat 输入框附近通常会显示当前速度或推理档位,例如:
极速
中等
高
超高
Pro
对于内容较长、细节较多的图片提示词,可以在自动化运行前手动选择“高”。
系统脚本会沿用 ChatGPT 上一次保存的选择。当前脚本没有通过参数切换推理强度,因为 ChatGPT 暂未向外部 AppleScript 或 PowerShell 开放稳定的模型选择接口。
系统脚本测试成功后,可以手动执行,也可以交给 Codex Scheduled Task 定时调用。
例如,每隔 15 分钟读取下一条提示词,然后执行:
macOS:
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "$PROMPT" send
Windows:
& "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" -Prompt $PROMPT -Send
Codex 在这里仅负责定时执行命令。真正完成打开 Quick Chat、填入提示词和发送操作的是 AppleScript 或 PowerShell 系统脚本。
同样的脚本也可以被 macOS launchd、Windows 任务计划程序、Raycast、Alfred、Keyboard Maestro 或其他自动化平台调用。
这套方案可以:
它目前不能可靠做到:
由于这是一套键盘界面自动化方案,执行时可能会把 ChatGPT 拉到前台。如果正在其他程序中输入内容,建议暂停自动任务,避免窗口焦点变化。
这套方案的核心只有两条命令。
macOS:
osascript "$HOME/Scripts/ChatGPT/send-chatgpt.applescript" "$PROMPT" send
Windows:
& "$HOME\Scripts\ChatGPT\send-chatgpt.ps1" -Prompt $Prompt -Send
AppleScript 和 PowerShell 负责控制 ChatGPT Quick Chat。
提示词文件负责提供变量。
Codex、系统计划任务或其他自动化工具只负责决定何时执行。
这样就能把 ChatGPT 桌面端的生图能力接入自己的提示词库和自动化工作流,同时保留原始提示词内容以及 ChatGPT 自身的安全机制。
补充几点: 1.这个方法适合打开codex挂机用,如果你正在操作codex,容易失去窗口焦点,因为本质是通过键盘实现UI自动化。 2.自动化执行有可以自己写自动化脚本,也可以直接利用codex自动化任务,好处是提示词生成可以复用自己之前的一些skill,提示词生成好后,直接灌到这条命令里。 3.除了UI自动化,想要纯后台执行,更推荐的方式是绕过系统的image gen skill,让每次生图走自己的生图API。
Windows我没设备,没试过,有问题让AI帮你调下
已get!
慢慢学习一下