单击命令中的计算

Calculations inside Click command

这里是简单的代码:

f1::
    winGetActiveStats, title, width, height, topLeftX, topLeftY

    ;Doesn't work:
    ;click, %width% - 30, %height% - 30

    ;As well as this:
    ;click, (%width% - 30), (%height% - 30)

    ;Works fine:
    x := width - 30, y := height - 30
    click, %x%, %y%
return

由于某种原因,第一个和第二个示例不起作用。我该如何解决?

简短的回答:你无法修复它。文档指出 "%x%, %y%: 由于 click 不支持表达式,因此变量应包含在百分号中。" -- https://autohotkey.com/docs/commands/Click.htm

因此,如果您需要经常这样做,您可以创建一个函数

f1::
    MyClick()
return

MyClick()
    {
     winGetActiveStats, title, width, height, topLeftX, topLeftY
     x := width - 30, y := height - 30
     Click, %x%, %y%
    }

Click 命令创建一个包装函数:

Click(x, y)
{
    Click %x%, %y%
}

并使用此代码:

f1::
    winGetActiveStats, title, width, height, topLeftX, topLeftY
    Click(width - 30, height - 30)
    return

对于 WinGetActiveStats 这样的命令也可以使用 ByRef:

WinGetActiveStats(ByRef title, ByRef width, ByRef height, ByRef topLeftX, ByRef topLeftY)
{
    WinGetActiveStats title, width, height, topLeftX, topLeftY
}

结果是一种干净、一致且直接的命令调用方式,类似于 C:

f1::
    WinGetActiveStats(title, width, height, topLeftX, topLeftY)
    Click(width - 30, height - 30)
    return

几乎所有的 AutoHotkey 命令都可以做到这一点,这使得 AutoHotkey 的编程变得更加容易,代码更具可读性,消除了主代码中所有 %…% 的使用。我个人有一个模块,它包含 AutoHotkey 中几乎所有命令的包装函数——希望有一天我能把它放到网上。

这使用 Click 和表达式 expression mode:

winGetActiveStats, title, width, height, topLeftX, topLeftY
click % width - 30 "," height - 30