1

快速后台:新mac,长时间windows用户;不被 linux 和脚本吓到;不是以英语为母语的人,所以请接受我的翻译 :)

我目前正在使用RedQuits使 x 红色按钮退出应用程序,而不仅仅是关闭窗口。

这是一个很棒的程序,但有一个小问题(对我来说):无法选择哪些应用程序应该保持默认行为(x 关闭窗口,而不是应用程序)。

所以我发现了一个非常古老的(2006 年)应用程序,叫做Stoplight,它完全符合我的要求:选择哪些程序不应该受到影响。

不幸的是,Stoplight 不再起作用。

所以,我试图看看脚本做了什么(它是一个.bundle),但看起来它已经编译了。

对于问题:

  • 有没有办法反编译脚本,所以我可以让它再次工作?
  • 如果没有,任何人都知道如何制作不应被 RedQuits 关闭的应用程序白名单?
  • 再次,如果没有,我应该从哪里开始构建自己的脚本来拦截关闭窗口并使其杀死应用程序的信号?
  • 任何其他提示表示赞赏。

谢谢。


编辑 (2013-09-23)

我找到了解决我的问题的方法。
我创建了一个 AppleScript 来监视在没有窗口的后台运行的进程。
如果进程不在白名单中,请将其关闭。

我稍后会发布脚本,但说实话,我不喜欢我的解决方案,仍然想知道你们是否有任何想法。

所以我不会接受我的答案是正确的。


编辑 (2013-09-26)

我们应该将问题迁移到https://apple.stackexchange.com/吗?

4

2 回答 2

2

这可能不是您想听到的,但是您可以使用 CMD-Q 键盘快捷键来做到这一点。

但是,如果您需要过滤适用于哪些应用程序,您可以通过以下方式使用键盘快捷键:

  • Automator 应用程序中的新服务
  • 添加“运行 Applescript”操作
  • 设置服务参数:

no input服务接收any application

  • 添加以下 Applescript:

.

on run {input, parameters}
    tell application (path to frontmost application as text) to quit
    return input
end run
  • 使用新名称保存服务,例如 QuitAll,然后关闭 automator 应用程序
  • 打开“系统偏好设置”对话框的“键盘”部分
  • 选择“键盘快捷键”选项卡
  • 从左侧选择“服务”
  • 向下滚动右侧找到您的“QuitAll”服务
  • 启用并单击“QuitAll”服务的右侧
  • 添加键盘快捷键。我选择 CTRL-CMD-Q,但你可以选择任何
  • 关闭键盘首选项对话框

现在这是非常简单的 - 它应该适用于所有应用程序,无一例外,就像 CMD-Q 一样。您应该能够编辑 applescript 以在此处添加某种应用过滤。

于 2013-09-20T01:26:53.723 回答
1

这是我的解决方法。我对此不满意,因为它每 10 秒循环一次以“退出”进程。
在这里发布它以防万一它可以帮助那里的任何人......

#!/usr/bin/osascript

-- INICIO DAS FUNCOES EXTRAS
set app_path to path to current application
set app_name to get name of me
set myPath to path to me
tell application "Finder" to set myFolder to (container of myPath) as string
set commonScript to load script alias ((myFolder) & "FuncoesExtras.scpt")
-- FIM DAS FUNCOES EXTRAS

set WhiteList to {app_name, "App Store", "iTunes", "Finder", "Mail"}

repeat

    tell application "System Events"
        repeat with this_app in (get processes whose background only is false and windows is {})
            set NomeDoApp to the name of this_app
            if NomeDoApp is not in WhiteList then
                try
                    tell NomeDoApp to quit
                    log_event("App " & NomeDoApp & " encerrado com sucesso", "FecharProgramas") of commonScript
                on error
                    do shell script "killall " & quoted form of NomeDoApp
                    log_event("Forcando interrupcao do App " & NomeDoApp, "FecharProgramas") of commonScript
                end try
            end if
        end repeat
    end tell

    tell application "System Events" to set myPID to (unix id of processes whose name is app_name)
    do shell script ("/usr/bin/renice 18 " & myPID)

    delay 10

end repeat

我仍然愿意接受建议。

于 2013-09-24T00:18:12.627 回答