6

Я хотел бы иметь возможность привязывать некоторые клавиши к щелчкам мыши, выполненным в определенных местах. Например: когда я нажимаю F1, я должен щелкнуть левой кнопкой мыши в координатах 300x350, F2 в 600x350 и так далее. Еще лучше, если это может быть привязано к конкретному оконному приложению, чтобы координаты могли быть относительно него, а не базового рабочего стола.

Есть ли программное обеспечение, которое позволяет это?

Сложение:

Хорошо, autohotkey - это здорово, но у меня проблемы с моей настройкой. Цитирую мой комментарий ниже:

Я использую его со старой игрой (администратор чемпионата 01/02), которая работает в оконном режиме (и я должен установить совместимость с win98, чтобы она запускалась): я могу заставить мышь двигаться, но щелчок мышью не поступает в приложение

Я прочитал этот FAQ, но это не помогло, это скрипт, который я пробовал:

SendMode Play
SetKeyDelay, 0, 50, Play

F1::Click 42, 191
F2::ControlSend ahk_class main, Click, Championship Manager 01/02

Все еще не повезло: указатель движется, но щелчок не проходит.

3 ответа3

2
SendMode Play
SetKeyDelay, 0, 0, Play

F1::Click 42, 131
F2::ControlSend ahk_class main, Click, Championship Manager 01/02
return
1

http://www.autohotkey.com/ (и его клоны) предоставляют такую возможность. Вы хотите использовать особенно команду " Click ":

Кликает кнопку мыши по указанным координатам. Он также может удерживать кнопку мыши, поворачивать колесо мыши или перемещать мышь.
0

По умолчанию координаты относятся к активному окну, но вы также можете настроить его. Вы можете использовать различные команды для достижения нужного поведения приложения. В вашем случае я бы порекомендовал # версию 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .