По умолчанию координаты относятся к активному окну, но вы также можете настроить его. Вы можете использовать различные команды для достижения нужного поведения приложения. В вашем случае я бы порекомендовал #
версию IfWinActive
; это делает так, что горячие клавиши существуют только для целевого окна и упрощает код.
Вы подтвердили, что получаете доступ к правильному окну? На самом ли деле заголовок программы
точно говорит
Championship Manager 01/02
? Попробуйте тест с простым сценарием, чтобы проверить:
#IfWinActive, Championship Manager 01/02
F1::MsgBox Yup; correct window.
#IfWinActive
По умолчанию вам нужно точно соответствовать тексту заголовка целевого окна, но вы можете использовать другой режим соответствия:
SetTitleMatchMode, 1 ; Match the start of the Window’s titlebar ; easier but more false-matches
e.g.: Championship Manager matches
SetTitleMatchMode, 2 ; Match any part of the titlebar; easiest but most false-matches
e.g.: ship Man matches
SetTitleMatchMode, 3 ; Match the titlebar of the Window exactly; most restrictive but fewer false-matches
e.g.: Championship Manager 01/02 matches
Существует множество способов эмулировать щелчок мышью. Попробуйте каждый, пока не найдете тот, который подходит для вашей программы. Вы можете
указать режим для команды «
Click
и общей команды «
Send
(по умолчанию это «
Событие» ), или вы можете явно указать режим («
Воспроизведение рекомендуется для сложных программ и игр»):
Send Click 42,191 ; defaults to Event
SendPlay Click 42,191
SendInput Click 42,191
SendEvent Click 42,191
SendMode Input
Send Click 42,191 ; uses Input mode
SendMode Play
Send Click 42,191 ; uses Play mode
SendMode Event
Send Click 42,191 ; back to Event mode
Вместо отправки щелчка мыши, вы можете попробовать отправить левую кнопку мыши, но сначала вам нужно переместить курсор вручную:
MouseMove 42,191,0 ; Immediately move the cursor relative to the active window
Send LButton ; Left-click
Что касается
ControlSend
, обратите внимание, что он конкретно говорит:
В отличие от команды Send, ControlSend не может отправлять щелчки мышью. Используйте ControlClick для этого.
ControlClick
самом деле не предназначен для отправки кликов в окно верхнего уровня, поэтому вам придется идентифицировать элементы управления, и это предполагает, что в игре даже используются реальные элементы управления.
Попробуйте следующее и измените
SendMode
при необходимости (особенно попробуйте
Play )
CoordMode, Mouse, Relative ; Explicitly set mouse coords to relative
SetTitleMatchMode, 1 ; Match start of titlebar (e.g., Foobar*)
SendMode Event ; Use Event mode (try Input and Play)
#IfWinActive, Championship Manager ; Only make hotkeys for specified window
F1::Click 42, 191 ; Send a mouse-click (left-click)
F2::Click 558, 191 ; …
#IfWinActive ; Reset conditional block