在特定屏幕坐标处模拟鼠标点击

在特定屏幕坐标处模拟鼠标点击

我希望能够将某些键绑定到特定位置的鼠标单击。例如:当我按 F1 时,应该在坐标 300x350 处单击鼠标左键,按 F2 时在坐标 600x350 处单击鼠标左键,依此类推。如果可以将其绑定到特定窗口应用程序,以便坐标可以相对于它而不是基本桌面,那就更好了。

是否有软件可以实现这个功能?

添加:

好吧,autohotkey 很棒,但我的特定设置有问题。下面引用我的评论:

我正在用它玩一款老游戏(冠军经理 01/02),该游戏在窗口模式下运行(我必须设置 win98 兼容性才能运行):我可以让鼠标移动,但应用程序没有点击

我读过了此常见问题解答但它没有帮助,这是我尝试过的脚本:

SendMode Play
SetKeyDelay, 0, 50, Play

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

仍然没有运气:指针移动但没有点击。

答案1

http://www.autohotkey.com/(及其克隆)提供了这样的功能。你尤其想使用“点击“-命令:

在指定坐标处单击鼠标按钮。它还可以按住鼠标按钮、转动鼠标滚轮或移动鼠标。

答案2

SendMode Play
SetKeyDelay, 0, 0, Play

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

答案3

默认情况下,坐标相对于活动窗口,但您也可以专门设置它。您可以使用不同的命令来实现所需的特定于应用程序的行为。对于您的情况,我建议使用 版本#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在必要时进行更改(特别是尝试

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

答案4

我认为 Mediachance 的多键盘宏可以做到这一点。

Robotask 机器人任务, 也。

相关内容