我正在考虑使用Mac的AppleScript制作一个程序,在系统关机时将系统静音。
虽然我不熟悉AppleScript,但我不知道如何使用IF语句来确定系统是否正在关闭。我已经完成了一些谷歌搜索,我发现找不到应用程序是控制"关机,但我不知道如何检查状态是否已关闭"。有人可以帮我解决这个问题吗?
答案 0 :(得分:2)
.app
包),其中包含标准on quit
处理程序,您可以在其中执行所需的操作行动(System Preferences
,见下文),或者,更灵活但更复杂,作为发布代理(请参阅https://stackoverflow.com/a/22872222/45375)。<强>说明:强>
Script Editor
并打开一个新的脚本窗口。# This standard handler is called when the application quits.
on quit
# Mute the system volume.
# !! See caveat below.
set volume with output muted
continue quit # signal to the system that it's OK to quit
end quit
将脚本另存为保持打开的应用程序:
File Format
应用 Stay open after run handler
打开System Preferences > Users & Groups > Login Items
,将新保存的*.app
捆绑包拖到列表中,然后选中它旁边的复选框,以使其隐藏启动。
最后一步是隐藏新应用程序的Dock图标,因为它没有理由拥有它:
defaults write /full/path/to/newApp.app/Contents/Info.plist LSUIElement 1
注意:您也可以使用LSBackgroundOnly
,但LSUIElement
的优势在于,如果想要,您仍然可以显示UI元素,例如调试。
重要:替换/full/path/to/newApp.app
新应用的完整路径;如果您为Info.plist
文件指定 完整路径,则命令才能生效。
要进行测试,请以交互方式启动新应用,并确保不显示Dock图标。 (您可以通过Activity Monitor
退出应用。)
CAVEAT :如果目的是抑制系统启动声音,set volume with output muted
有两个缺点:
on run
处理程序中执行此操作)。考虑下面的替代方法,它需要管理员权限来设置和调用具有root权限的nvram SystemAudioVolume=%80
,从而绕过上述缺点。
您可能从上面的AppleScript应用程序中运行do shell script "nvram SystemAudioVolume=%80" user name "someAdminUsername" password "matchingAdminPassword" with administrator privileges
,但您必须对密码进行硬编码,出于安全考虑,这是不可取的。
替代方法,通过com.apple.loginwindow
使用系统范围的退出挂钩。
已弃用机制,用于在 logout 上运行脚本,但是,仍然可以在OSX 10.10中运行;鉴于没有直接的非弃用等价物,可能会继续得到支持。
请注意,您确实需要管理员权限:
sudo defaults write com.apple.loginwindow LogoutHook <yourScript>
<yourScript>
必须是可执行文件,例如shell脚本;请注意,可执行文件在 root 用户的上下文中运行。
如果您考虑将启动声音静音,请从该脚本调用以下shell命令:
nvram SystemAudioVolume=%80 # to try this interactively, prepend `sudo `
这会将声音静音,直到重启后,有效地静音启动声音,而保持声音静音。
请注意,nvram
命令需要 root权限,根据定义,这些权限在通过com.apple.loginwindow
注销挂钩运行的脚本中生效。相反,要以交互方式尝试命令,请使用sudo nvram SystemAudioVolume=%80
- 否则,您将收到以下无效的错误消息:nvram: Error setting variable - 'SystemAudioVolume': (iokit/common) general error
答案 1 :(得分:1)
老实说,最好是制定一个确定性的解决方案。我的意思是,你制作一个脚本:
然后,您将获取脚本并创建一个Automator服务,您可以将其分配给某个快捷方式,以便您更轻松地使用它。 ctrl-opt-cmd-eject等等。 :)
这就是我如何解决它,如果我有需要,做工作的时间短而且很好,而且应该合理地工作。
答案 2 :(得分:0)
如果你想使用@ mklement0答案中提到的 LogoutHook 。
您可以使用正常的Applescript命令set volume with output muted
。
您只需将osascript shebang添加到Applescript文档的顶部
即
#!/usr/bin/osascript
set volume with output muted
然后将文件保存为applescript文本文件。
在保存对话框中使用: 文件格式:文字 )
它将获得扩展名 .applescript
保存后,使用Terminal.app chmod 脚本,就像使用普通的shell脚本一样。
即
/bin/chmod +x foo.applescript
然后将其添加到loginwindows LogoutHook。
sudo defaults write com.apple.loginwindow LogoutHook foo.applescript
答案 3 :(得分:0)
我知道这是一篇过时的文章,但是对于仍然在寻找如何执行此操作的人(像我一样),我有一个简单的方法。 在开始脚本编写之前,我在主文件夹中创建了一个名为工具栏脚本的新文件夹。(这是可选的) 在桌面显示Finder的情况下,单击转到>实用程序>脚本编辑器。 在打开的窗口中输入或复制并粘贴代码
set volume with output muted
tell application "finder"
shut down
end tell
单击添加的脚本上方的最后一个按钮-它应该已编译。如果找不到该按钮,则在顶部单击“脚本”>“编译” 单击“文件”>“保存”,在我称为“我的关机”的保存中,然后选择脚本文件夹(这是可选的) 在对话框底部的文件格式处,单击箭头,然后将格式更改为应用程序,然后单击保存。
打开保存该文件夹的文件夹,然后将图标拖到扩展坞。单击您刚刚放置在扩展坞中的图标。 现在,如果一切正常,则应该使音量静音并关闭计算机。 如果您仍有任何打开的空间,则不会关闭计算机。
欢呼 彼得
答案 4 :(得分:0)
首先,您应该创建一个关闭脚本(带有终端)
sudo nano /Library/Scripts/sound-off.sh
在用以下行填充它之后:
#!/bin/bash
osascript -e ‘set volume output muted 1’
并制作一个类似的声音脚本
sudo nano /Library/Scripts/sound-on.sh
并填写:
#!/bin/bash
osascript -e ‘set volume 4’
然后将它们作为执行文件访问
sudo chmod u+x /Library/Scripts/sound-off.sh
sudo chmod u+x /Library/Scripts/sound-on.sh
,然后在关闭和打开mac设备时设置它们的最后一部分:
sudo defaults write com.apple.loginwindow LogoutHook /Library/Scripts/sound-off.sh
sudo defaults write com.apple.loginwindow LoginHook /Library/Scripts/sound-on.sh