使用自动键进行鼠标控制

时间:2012-03-29 10:06:37

标签: mouse autohotkey

我正在为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

1 个答案:

答案 0 :(得分:0)

首先,引用MouseGetPos的文档:

  

检索到的坐标相对于活动窗口,除非   CoordMode用于更改屏幕坐标。

这意味着它相对于第一个窗口。

如果这些窗口不相同(无论如何),这对你来说很有可能。

话虽如此,如果它们相同,您可以将CoordMode更改为屏幕并使用WinMove将第二个窗口的大小和位置与第一个窗口完全相同,然后再激活它,然后使用Click命令。

我唯一能想到的就是查看ControlClick的选项,你会看到Xn和Yn是相对于一个控件的。每个控件实际上都是一个窗口,有时一个应用程序只有一个控件,即主窗口。

旁注:你的剧本中不需要花括号{} 当你有一个循环或multi-line if / else block时,它们只在热键中需要。