![在特定屏幕坐标处模拟鼠标点击](https://linux22.com/image/1243462/%E5%9C%A8%E7%89%B9%E5%AE%9A%E5%B1%8F%E5%B9%95%E5%9D%90%E6%A0%87%E5%A4%84%E6%A8%A1%E6%8B%9F%E9%BC%A0%E6%A0%87%E7%82%B9%E5%87%BB.png)
我希望能够将某些键绑定到特定位置的鼠标单击。例如:当我按 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 机器人任务, 也。