gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 03:08:57 28 4
gpt4 key购买 nike

我无法弄清楚如何检测 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,所以如果我在其他地方搞砸了,请告诉我。

最佳答案

这可以在没有任何第 3 方添加的情况下完成,而是调用 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 位标志,这些需要按位与运算看看 key 是否被握住。 AppleScript 没有按位运算符 (!!),所以在这种情况下,AND 是通过算术模拟的——首先用整数将 modifierFlags() 位域除以 NSEventModifierFlagControl 位标志,然后查看结果是否为奇数。

modifierFlags() 仅报告瞬时修改器状态,因此我们必须循环轮询它以等待按键。

Other modifier keys也可以这样检查。它们是:

<表类="s-表"><头>语法描述<正文>NSEventModifierFlagCapsLock已按下 Caps Lock 键。NSEventModifierFlagShift已按下 Shift 键。NSEventModifierFlagControl已按下 Control 键。NSEventModifierFlagOption已按下 Option 或 Alt 键。NSEventModifierFlagCommand已按下 Command 键。NSEventModifierFlagNumericPad已按下数字小键盘中的某个键或箭头键。NSEventModifierFlagHelp已按下帮助键。NSEventModifierFlag函数已按下功能键。NSEventModifierFlagDeviceIndependentFlagsMask设备无关修饰符标志被屏蔽。

关于applescript - 检测按键并延迟直到按键释放 AppleScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44336531/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com