我无法弄清楚如何检测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,所以如果我搞砸了其他地方,请告诉我。
答案 0 :(得分:0)
使用(" vanilla")AppleScript是不可能的。接近它的唯一方法是使用第三方命令行二进制文件检查是否按下了一个修饰符键" checkModifierKeys" (https://bitbucket.org/anddam/checkmodifierkeys/downloads/?tab=downloads)。
您必须使用类似
的内容do shell script "/usr/local/bin/checkModifierKeys control"
在重复循环中。它运作良好。
答案 1 :(得分:0)
这可以在没有任何 3rd 方添加的情况下完成,而是调用可可框架:
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's modifierFlags()
是一个位域,而 NSEventModifierFlagControl
是一个 2n 位标志,需要将它们按位与在一起以查看密钥是否被保持。 AppleScript 没有按位运算符 (!!),因此在这种情况下,AND 是在算术上模拟的 - 首先通过将 modifierFlags() 位域除以 NSEventModifierFlagControl 位标志的整数,然后查看结果是否为奇数。
modifierFlags()
只报告瞬时修饰符状态,因此我们必须在循环中轮询它以等待按键。
Other modifier keys 也可以通过这种方式检查。它们是:
语法 | 说明 |
---|---|
NSEventModifierFlagCapsLock | Caps Lock 键已被按下。 |
NSEventModifierFlagShift | Shift 键已被按下。 |
NSEventModifierFlagControl | 已按下 Control 键。 |
NSEventModifierFlagOption | Option 或 Alt 键已被按下。 |
NSEventModifierFlagCommand | Command 键已被按下。 |
NSEventModifierFlagNumericPad | 数字小键盘中的某个键或箭头键被按下。 |
NSEventModifierFlagHelp | 帮助键已被按下。 |
NSEventModifierFlagFunction | 已按下功能键。 |
NSEventModifierFlagDeviceIndependentFlagsMask | 与设备无关的修饰符标志被屏蔽。 |