在 macOS 上,osascript
命令行工具可用于运行 AppleScript 和 JavaScript,两者都可以访问 Apple 事件 API。
对于大多数 API,翻译非常简单。例如
tell application "Terminal" to quit
翻译为:
Application("Terminal").quit()
此外,在 JS 中有一个commandsOfClass
列出可用操作的函数:
osascript -l JavaScript -e 'Application("Terminal").commandsOfClass()'
# close, count, delete, doScript, duplicate, exists,
# getURL, make, move, open, print, quit, save
osascript -l JavaScript -e 'Application("System Events").commandsOfClass()'
# abortTransaction, attachActionTo, attachedScripts, beginTransaction, cancel, click,
# close, confirm, connect, count, decrement, delete, disconnect, doFolderAction,
# doScript, duplicate, editActionOf, enable, endTransaction, exists, increment,
# keyCode, keyDown, keyUp, keystroke, logOut, make, move, open, perform, pick,
# print, quit, removeActionFrom, restart, save, select, shutDown, sleep, start, stop
但是 AppleScript 有一些更晦涩的事件,特别是aevtrlgo
(“真正注销”)事件:
tell application "loginwindow" to «event aevtrlgo»
我什至不能«»
在终端中输入字符,所以这是一个可复制粘贴的版本:
printf 'tell application "loginwindow" to \xc2\xabevent aevtrlgo\xc2\xbb' | osascript
现在,我怎样才能«event aevtrlgo»
在 JavaScript 中做到这一点?
我试过这样的事情:
Application("loginwindow").rlgo();
Application("loginwindow").aevtrlgo();
Application("loginwindow").reallyLogOut();
Application("loginwindow").event("rlgo");
Application("loginwindow").event("aevtrlgo");
Application("loginwindow")["«event aevtrlgo»"]();
但我总是得到完全相同的回应:
execution error: Error on line 1: Error: Message not understood. (-1708)
PlusApplication("loginwindow").commandsOfClass()
产生一个空列表。