检测按键并延迟直到按键释放的AppleScript

3

我在尝试使用AppleScript检测按键并延迟等待该按键被释放方面遇到了困难。 我想制作一个切换缩放的工具,并且我已经完成了其他所有事情(我认为)。 这是我目前的代码:

on idle
    set ztoggle to 0

    repeat

        --how do i make it so a key is needed to run this loop? maybe an 'if (im not sure what to put here) then' loop?--
            if (ztoggle = 1) then
                set ztoggle to 0
            else if (ztoggle = 0) then
                set ztoggle to 1
            end if
        --how do i make it so the program waits at this line until the key from before is released? i was thinking delay, but im not sure--


        if (ztoggle = 1) then
            tell application "System Events"
                key code 28 using {option down, command down}
            end tell
        end if

        set ztoggle to 0

    end repeat
end idle

有没有人知道我应该怎么做?此外,这是我第一次尝试使用AppleScript,所以如果我在其他地方搞砸了,请告诉我。

2个回答

2

使用(“原生”)AppleScript 是不可能实现的。唯一接近的方法是使用第三方命令行二进制文件“checkModifierKeys”检查是否按下了修改键(https://github.com/reggiezhang/checkModifierKeys)[编辑:新的url-感谢@jerry-t]。

你需要使用类似以下的东西:

do shell script "/usr/local/bin/checkModifierKeys control"

在一个重复循环中。它的工作效果很好。

1
链接已失效。我在Github上找到了这个(不确定是否同一作者):https://github.com/reggiezhang/checkModifierKeys。非常好用。 - Jerry T

2
这可以在不使用任何第三方添加组件的情况下完成,而是通过调用Cocoa框架来实现:
use framework "Cocoa"
use scripting additions

global ca
set ca to current application

to isModifierPressed(modifier)
    ((ca's NSEvent's modifierFlags()) / modifier as integer) mod 2 is equal to 1
end isModifierPressed

repeat until isModifierPressed(ca's NSEventModifierFlagControl)
    delay 0.1 -- sad poll/wait loop :(
end repeat
display dialog "Control was pressed"

请注意,NSEvent的modifierFlags()是一个位域,NSEventModifierFlagControl是一个2n位标志,需要将它们按位与在一起才能查看是否按住了键。AppleScript没有位运算符(!!),因此在这种情况下,AND通过整数除以modifierFlags()位域和NSEventModifierFlagControl位标志来模拟算术运算,然后查看结果是否为奇数。 modifierFlags()仅报告瞬时修改器状态,因此我们必须在循环中轮询它以等待按键。 其他修改键也可以用这种方式检查。它们是:
语法 描述
NSEventModifierFlagCapsLock 已按下大写锁定键。
NSEventModifierFlagShift 已按下 Shift 键。
NSEventModifierFlagControl 已按下 Control 键。
NSEventModifierFlagOption 已按下 Option 或 Alt 键。
NSEventModifierFlagCommand 已按下 Command 键。
NSEventModifierFlagNumericPad 已按下数字键盘中的一个键或箭头键。
NSEventModifierFlagHelp 已按下帮助键。
NSEventModifierFlagFunction 已按下功能键。
NSEventModifierFlagDeviceIndependentFlagsMask 设备无关的修改标志被屏蔽。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接