透過 AutoHotkey,你可以將遊戲內滑鼠點擊與按鍵操作全部改為後台執行,不干擾其他視窗。 用 ControlSend 和 ControlClick 取代前台點擊,搭配 SetTimer 驅動主循環,是遊戲自動化腳本的基礎架構。
研究答案

Create a landscape editorial hero image for this Studio Global article: 以圖片製作出來看看. Article summary: # AI generated image. Topic tags: general, image. Style: premium digital editorial illustration, source-backed research mood, clean composition, high detail, modern web publication hero. Use reference image context only for broad subject, composition, and topical grounding; do not copy the exact image. Avoid: logos, brand marks, copyrighted characters, real person likenesses, fake screenshots, UI text, readable text, watermarks, charts with fake numbers, clickbait thumbnails, icons, and tiny thumbnail layouts. Make it useful as an illustrative visual, not as factual evidence.
許多玩家為了節省重複操作的時間,會嘗試用 AutoHotkey (AHK) 撰寫自動化腳本。然而,常見的難題包括:怎麼讓腳本在背景執行而不影響其他工作?怎麼準確取得遊戲視窗內的座標?以及如何讓按鍵發送更穩定?
這篇文章以《水滸歷險 Online》的自動化腳本修改過程為案例,逐步解析後台按鍵、座標計算、滑鼠擷取熱鍵與多組按鍵發送的實作方法。
前台腳本在執行滑鼠點擊或按鍵發送時,會強制把遊戲視窗拉到最前面,中斷你正在做的其他事情。後台操作的目標是:腳本運行時,你可以繼續使用其他視窗,遊戲視窗在背景照樣接收指令。
在 AHK 中,後台操作的關鍵指令是:
ControlSend:向指定視窗發送按鍵,不啟用該視窗。ControlClick:向指定視窗的特定座標發送滑鼠點擊,不啟用該視窗。ahk_id %TargetHwnd%遊戲內的 XY 座標和螢幕絕對座標不同。當遊戲視窗移動或改變大小時,以螢幕絕對座標寫死的點擊就會跑掉。
正確做法是計算「視窗內相對座標」:
遊戲內 X = 滑鼠螢幕 X - 遊戲視窗左上角 X
遊戲內 Y = 滑鼠螢幕 Y - 遊戲視窗左上角 Y如果要更精確,應使用遊戲內容區(扣除標題列和邊框)的左上角作為基準,而不是整個視窗的左上角。
; 遊戲視窗左上角座標(需先取得)
winX = 100
winY = 80
; 取得滑鼠螢幕座標
GetCursorPos mouseX, mouseY
; 換算成遊戲視窗內座標
gameX := mouseX - winX
gameY := mouseY - winY注意事項:
在開發階段,頻繁手動輸入座標很麻煩。更有效率的方式是:按下一個熱鍵,直接將目前滑鼠位置的座標填入腳本 GUI 的欄位中。
; 註冊熱鍵 F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, 已擷取座標: X%mx% Y%my%
SetTimer, RemoveTip, -2000
return這樣只要將滑鼠移到目標位置,按下 F1,座標就會自動填入「尋找 X / 尋找 Y」欄位。你可以視需求綁定不同的熱鍵到不同的座標欄位。
原始的腳本設計了四個獨立按鍵,每個按鍵有自己的延遲時間。但在實際遊戲中,常常需要連續發送兩個按鍵(例如先按技能鍵再按輔助鍵),然後才等待一段時間。
修改方向:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; 每N分鐘發送一次按鍵組
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; 每次循環都發送
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}這是 AHK 遊戲腳本最常見的抉擇:
| 方式 | 優點 | 缺點 |
|---|---|---|
| 可隨時停止、不阻塞腳本、結構清晰 | 最小間隔約 1 秒,不適合高頻操作 |
| 可精確控制每次循環間隔 | 停止腳本需要額外機制,容易卡死 |
如果你的遊戲需要每秒或更慢的頻率進行操作(例如重複使用技能、定時補 buff),SetTimer 是較乾淨的選擇。如果需要毫秒級精確控制,則應使用 Sleep 迴圈搭配 break 條件。
PostMessage 或尋找其他視窗訊息。{F1}、{Enter}。MouseGetPos, , , TargetHwndControlClick 的座標可能會偏移。建議遊戲使用視窗模式,並將顯示縮放設為 100%。從單純的前台腳本改造成後台多組按鍵系統,核心的改動在於:後台指令的選用(ControlSend / ControlClick)、視窗內座標的換算、以及主循環的驅動方式。文中附上的修改範例可以直接套用到《水滸歷險 Online》或其他類似需求的遊戲自動化腳本中。如果你的遊戲有特殊的按鍵組合或座標點擊需求,建議先從最小可行的後台版本開始測試,逐步疊加功能。
Studio Global AI
這個頁面包含附來源佐證的答案,你可以在 Studio Global 內繼續追問。
透過 AutoHotkey,你可以將遊戲內滑鼠點擊與按鍵操作全部改為後台執行,不干擾其他視窗。
透過 AutoHotkey,你可以將遊戲內滑鼠點擊與按鍵操作全部改為後台執行,不干擾其他視窗。 用 ControlSend 和 ControlClick 取代前台點擊,搭配 SetTimer 驅動主循環,是遊戲自動化腳本的基礎架構。