Dzięki AutoHotkey możesz przerzucić wszystkie kliknięcia i operacje klawiszowe w grze na działanie w tle, nie przeszkadzając w pracy z innymi oknami. Używanie ControlSend i ControlClick zamiast działań na pierwszym planie, wraz z pętlą główną opartą na SetTimer, to podstawowa architektura skryptów automatyzacji gier.
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.
Wielu graczy, chcąc zaoszczędzić czas przy powtarzalnych czynnościach, próbuje pisać skrypty automatyzujące w AutoHotkey (AHK). Typowe problemy to: jak sprawić, by skrypt działał w tle, nie przeszkadzając w innych pracach? Jak dokładnie obliczyć współrzędne w oknie gry? I jak sprawić, by wysyłanie klawiszy było stabilne?
Ten artykuł, na przykładzie procesu modyfikacji skryptu automatyzującego dla gry Water Margin Online (水浒历险), krok po kroku wyjaśnia implementację wysyłania klawiszy w tle, obliczania współrzędnych, skrótów do przechwytywania pozycji myszy i wysyłania par klawiszy.
Skrypt działający na pierwszym planie (foreground) podczas klikania myszą lub wysyłania klawiszy wymusza wysunięcie okna gry na wierzch, przerywając inne czynności. Celem działania w tle jest: podczas działania skryptu możesz swobodnie korzystać z innych okien, a okno gry w tle i tak odbiera komendy.
W AHK kluczowymi komendami do działania w tle są:
ControlSend: wysyła naciśnięcia klawiszy do określonego okna, nie aktywując go.ControlClick: wysyła kliknięcie myszą do określonych współrzędnych w oknie, nie aktywując go.ahk_id %TargetHwnd%Współrzędne XY w grze różnią się od bezwzględnych współrzędnych ekranu. Gdy okno gry zostanie przesunięte lub zmieni rozmiar, punkty zapisane jako bezwzględne współrzędne ekranu przestają działać.
Prawidłowym rozwiązaniem jest obliczenie względnych współrzędnych w oknie:
X w grze = X myszy na ekranie - X lewego górnego rogu okna gry
Y w grze = Y myszy na ekranie - Y lewego górnego rogu okna gryDla większej precyzji należy użyć lewego górnego rogu obszaru treści gry (po odjęciu paska tytułu i ramek), a nie całego okna.
; Współrzędne lewego górnego rogu okna gry (należy je wcześniej pobrać)
winX = 100
winY = 80
; Pobierz pozycję myszy na ekranie
MouseGetPos, mouseX, mouseY
; Przelicz na współrzędne wewnątrz okna gry
gameX := mouseX - winX
gameY := mouseY - winYUwagi:
Na etapie tworzenia skryptu ręczne wpisywanie współrzędnych jest uciążliwe. Znacznie wydajniejszym sposobem jest użycie skrótu klawiszowego, który automatycznie wprowadzi aktualną pozycję myszy do pól GUI skryptu.
; Zarejestruj skrót klawiszowy F1
Hotkey, F1, GetMousePos
return
GetMousePos:
MouseGetPos, mx, my
GuiControl,, FindX, %mx%
GuiControl,, FindY, %my%
ToolTip, Przechwycono współrzędne: X%mx% Y%my%
SetTimer, RemoveTip, -2000
returnW ten sposób wystarczy przesunąć mysz nad cel, nacisnąć F1, a współrzędne zostaną automatycznie wypełnione w polach „Szukaj X / Szukaj Y”. Możesz przypisać różne skróty do różnych pól współrzędnych.
Oryginalny skrypt zawierał cztery niezależne klawisze, każdy z własnym opóźnieniem. W praktyce jednak w grze często potrzebne jest wysłanie dwóch klawiszy po kolei (np. najpierw klawisz umiejętności, potem pomocniczy), a dopiero potem odczekanie chwili.
Kierunek modyfikacji:
SendKeyGroup(useGroup, keyA, keyB, waitMs, minute) {
global TimerCount, TargetHwnd
if (useGroup != 1)
return
if (minute > 0 and Mod(TimerCount, minute * 60) = 0) {
; Wyślij grupę klawiszy co N minut
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
if (minute = 0) {
; Wyślij przy każdej pętli
ControlSend, , {%keyA%}, ahk_id %TargetHwnd%
Sleep, 100
ControlSend, , {%keyB%}, ahk_id %TargetHwnd%
}
}To najczęściej spotykany dylemat w skryptach AHK do gier:
| Metoda | Zalety | Wady |
|---|---|---|
| Można łatwo zatrzymać, nie blokuje skryptu, czytelna struktura | Minimalny interwał to ok. 1 s, nie nadaje się do operacji z dużą częstotliwością |
| Precyzyjna kontrola interwału między każdą iteracją | Zatrzymanie skryptu wymaga dodatkowego mechanizmu, łatwo o zawieszenie |
Jeśli twoja gra wymaga operacji co sekundę lub rzadziej (np. powtarzanie umiejętności, okresowe odnawianie buffów), SetTimer jest czystszym wyborem. Jeśli potrzebujesz kontroli z dokładnością do milisekund, lepiej użyć pętli Sleep z warunkiem break.
PostMessage lub znaleźć inne komunikaty okna.{F1}, {Enter}.MouseGetPos, , , TargetHwndControlClick mogą być przesunięte. Zaleca się używanie gry w trybie okna i ustawienie skalowania na 100%.Przeróbka prostego skryptu pierwszoplanowego na system tylnowidokowy z wieloma grupami klawiszy opiera się na trzech kluczowych zmianach: wybór komend tylnowidokowych (ControlSend / ControlClick), przeliczanie współrzędnych w oknie oraz sposób napędzania pętli głównej. Załączone przykłady modyfikacji można bezpośrednio zastosować w Water Margin Online lub innych skryptach automatyzujących gry o podobnych wymaganiach. Jeśli twoja gra wymaga specjalnych kombinacji klawiszy lub kliknięć w konkretne punkty, zalecamy zacząć od minimalnej działającej wersji tylnowidokowej i stopniowo dodawać funkcje.
Studio Global AI
This page includes a source-backed answer you can continue inside Studio Global.
Dzięki AutoHotkey możesz przerzucić wszystkie kliknięcia i operacje klawiszowe w grze na działanie w tle, nie przeszkadzając w pracy z innymi oknami.
Dzięki AutoHotkey możesz przerzucić wszystkie kliknięcia i operacje klawiszowe w grze na działanie w tle, nie przeszkadzając w pracy z innymi oknami. Używanie ControlSend i ControlClick zamiast działań na pierwszym planie, wraz z pętlą główną opartą na SetTimer, to podstawowa architektura skryptów automatyzacji gier.