我正在为2个不同的窗口制作一个脚本,当我点击第一个窗口时,会发生另一个窗口中相同位置的点击。
问题是,我的脚本点击了,但第二个窗口上的x
轴总是0
...我不知道为什么
也许你有一个解决方案或其他方式编写脚本?
这是我的剧本:
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases.
#Warn ; Recommended for catching common errors.
SendMode Input ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory.
;retrouver les id de 2 fenetres
WinGet, first_id, ID, window1
WinGet, sec_id, ID, window2
;activation des fenetres
WinActivate, ahk_id %sec_id%
WinActivate, ahk_id %first_id%
; fonction pour quitter la macro
~Esc::ExitApp
return
;test repeter clic souris
;LeftClic
~LButton::
{
MouseGetPos, xposi, yposi
ControlClick, x%xposi% y%yposi%, ahk_id %first_id%,,LEFT
WinActivate, ahk_id %sec_id%
ControlClick, x%xposi% y%yposi%, ahk_id %sec_id%,,LEFT
WinActivate, ahk_id %first_id%
MouseMove, xposi, yposi
}
return
答案 0 :(得分:0)
首先,引用MouseGetPos的文档:
检索到的坐标相对于活动窗口,除非 CoordMode用于更改屏幕坐标。
这意味着它相对于第一个窗口。
如果这些窗口不相同(无论如何),这对你来说很有可能。
话虽如此,如果它们相同,您可以将CoordMode更改为屏幕并使用WinMove将第二个窗口的大小和位置与第一个窗口完全相同,然后再激活它,然后使用Click命令。
我唯一能想到的就是查看ControlClick的选项,你会看到Xn和Yn是相对于一个控件的。每个控件实际上都是一个窗口,有时一个应用程序只有一个控件,即主窗口。
旁注:你的剧本中不需要花括号{} 当你有一个循环或multi-line if / else block时,它们只在热键中需要。