【问题标题】:How can you click the Screen using AppleScript?如何使用 AppleScript 单击屏幕?
【发布时间】:2021-07-11 17:00:33
【问题描述】:

所以我尝试使用测试脚本测试 click at 命令,但我得到了错误 -25200 并且我到处查看,我不明白为什么会出现这个错误。

property mousex : 1
property mousey : 1
property screenx: 2559
property screeny: 1599

tell application "System Events"



    repeat 100 times
         click at {mousex mod screenx, mousey mod screeny}
         set mousex to mousex + 100
         set mousey to mousey + 100
         delay 0.2
     end repeat

end tell
end run

【问题讨论】:

  • 一种方法是尝试点击越界 - 你的屏幕是这个尺寸吗?
  • 我用的是 13 英寸的 macbook air,屏幕尺寸为 2560 x 1600。我发现网上没有提到错误 -25200,所以我想我应该问一下。
  • 错误是无用的kAXErrorFailure。您可以尝试将屏幕值降低 1,因为坐标从 {0, 0} 开始。
  • 测试您的代码,当 GUI 更改时,我似乎最终会出错:即,当脚本单击的内容拉出菜单、关闭窗口或创建弹出窗口时。由于您在重复循环中没有添加任何延迟,因此脚本会尽可能快地触发,所以我怀疑它领先于 GUI 中的更改(这是相对较慢的操作),因此点击会落在正在失效的屏幕。尝试在end repeat 之前添加delay .2,看看是否仍然出现错误。
  • @red_menace 我这样做了,我仍然得到错误

标签: click applescript


【解决方案1】:

在这种情况下使用click at 不是正确的方法。 MouseTools 之类的东西会更好地满足您的需求。这样做的正确方法是:

property screenX : 1439
property screenY : 899

repeat with mousePos from 1 to 100
    do shell script "/usr/local/bin/mousetools -x " & ((mousePos * 100) mod screenX) & " -y " & ((mousePos * 100) mod screenY) & " -leftClick"
    delay 0.1
end repeat
end run

请注意,我做了一些更改:我不认为始终拥有两个具有完全相同值的变量是有效的,因此我将它们都更改为 mousePos。但是正如你所看到的,没有set mousePos to mousePos + 100,而是我使用了repeat with。重复每次循环时自动将变量增加一,因此我必须添加* 100。此外,使用 MouseTools 时 screenX 和 screenY 值会发生变化,您可以通过运行此脚本并将鼠标移动到右下角来获取屏幕大小:

repeat 10 times
    set mousePos to do shell script "/usr/local/bin/mousetools -location"
    display notification mousePos
    delay 1
end repeat

Affinity Photo(与 Photoshop 类似的产品)中运行此代码时的最终结果,我看到您打算将其用于:


以上代码在 13 英寸 MacBook Air 2019 上的 macOS 11.4 Beta 中测试


编辑:正如用户 3439894 所说:

还有:cliclick

我决定重写脚本以使用 cliclick,因为 cliclick 看起来更现代而且速度更快:

property screenX : 1439
property screenY : 899
repeat with mousePos from 1 to 100
    do shell script "/usr/local/bin/cliclick c:" & ((mousePos * 100) mod screenX) & "," & ((mousePos * 100) mod screenY)
    delay 0.1
end repeat
end run

这与上面的脚本完全相同。如您所见,屏幕大小仍然与使用 MouseTools 时相同,但仍然不知道为什么会这样。如果您想通过 cliclick 获取位置,请使用此脚本:

repeat 10 times
    set mousePos to do shell script "/usr/local/bin/cliclick p:."
    display notification mousePos
    delay 1
end repeat

以上代码在 13 英寸 MacBook Air 2019 上的 macOS 11.4 Beta 中测试


可以使用Homebrew 在终端中输入命令brew install cliclickbrew install mousetools 来安装cliclick 和MouseTools。

【讨论】:

  • 还有:cliclick
  • 顺便说一句,如果您不使用 Homebrew,两者都可以作为预编译的二进制文件使用。
  • @user3439894 我知道这一点,但用户必须将这些文件移动到正确的目录。
  • RE:“我知道这一点,但用户必须将这些文件移动到正确的目录”——正确的目录是什么?可以将它们放置在任何想要的位置。我知道一些将它们放置在其主 目录 中的bin 目录 中的用途。并手动将它们移动到例如/usr/local/bin/ 没什么大不了的!此外,并不是每个人都使用 Homebrew,对于那些不使用并且只想要这两种特定第三方实用程序的人来说,通过 Homebrew 安装将是荒谬的,因为它现在只需要几 GB 的空间Homebrew 及其依赖项。
  • 因为 MouseTools 甚至从未发布到版本 1(它已经 11 年了,最后一次更新是 2012 年 11 月 18 日到 v0.5),我也对此表示怀疑将针对 macOS 12 进行更新,但是,源代码是可用的,我没有看到其中的版权声明,所以如果可能的话,也许有人会更新它。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多