Click命令中的计算

时间:2018-01-28 12:43:01

标签: autohotkey

这是一个简单的代码:

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

由于某种原因,第1和第2个例子不起作用。我怎么解决它?

3 个答案:

答案 0 :(得分:1)

简短的回答:你无法修复它。文档说明"%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%
    }

答案 1 :(得分:1)

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中几乎所有命令的包装函数 - 希望有一天我会把它放到网上。

答案 2 :(得分:1)

使用expression mode

Click与表达式结合使用
winGetActiveStats, title, width, height, topLeftX, topLeftY
click % width - 30 "," height - 30