За допомогою AutoHotkey можна виконувати всі кліки миші та натискання клавіш у грі у фоновому режимі, не заважаючи іншим вікнам. Використання ControlSend і ControlClick замість передпланових дій разом із SetTimer для головного циклу є основою архітектури скриптів автоматизації ігор.
Research answer

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) для написання скриптів автоматизації, щоб заощадити час на повторюваних діях. Однак поширеними проблемами є: як змусити скрипт працювати у фоновому режимі, не впливаючи на інші завдання? Як точно отримати координати всередині ігрового вікна? І як зробити надсилання клавіш більш стабільним?
Ця стаття використовує процес модифікації скрипта автоматизації для Water Margin 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 секунди, не підходить для високочастотних операцій |
| Точний контроль інтервалу між ітераціями | Для зупинки потрібен додатковий механізм, легко зациклити |
Якщо вашій грі потрібні операції з частотою раз на секунду або рідше (наприклад, повторне використання навичок, періодичне накладання бафів), SetTimer – чистіший вибір. Якщо потрібен контроль на рівні мілісекунд, слід використовувати Sleep-цикл з умовою break.
PostMessage або шукати інші способи.{F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick можуть зміщуватися. Рекомендується використовувати віконний режим для гри та встановити масштаб 100%.Перетворення звичайного передпланового скрипта на фонову багатоклавішну систему зводиться до кількох ключових змін: вибір фонових команд (ControlSend/ControlClick), перерахунок координат всередині вікна та спосіб керування головним циклом. Наведені в статті приклади модифікації можна безпосередньо застосувати до Water Margin Online або інших ігор зі схожими вимогами до автоматизації. Якщо ваша гра вимагає особливих комбінацій клавіш або кліків по координатах, почніть із найпростішої фонової версії та поступово додавайте функціонал.
Studio Global AI
This page includes a source-backed answer you can continue inside Studio Global.
За допомогою AutoHotkey можна виконувати всі кліки миші та натискання клавіш у грі у фоновому режимі, не заважаючи іншим вікнам.
За допомогою AutoHotkey можна виконувати всі кліки миші та натискання клавіш у грі у фоновому режимі, не заважаючи іншим вікнам. Використання ControlSend і ControlClick замість передпланових дій разом із SetTimer для головного циклу є основою архітектури скриптів автоматизації ігор.