0

AppleScript (またはおそらく他のスクリプト) が、他の (関係のない) アプリケーションの状態が変化したとき、つまり閉じる、最小化したときに通知を受け取ることはまったく可能ですか? 目標は、最近閉じた、または最小化された 5 つのアプリケーションのリストを維持することです。

4

2 に答える 2

0

あなたは本当にapplescriptでこれを行うことはできません。あなたがobjective-cを知っているなら、それはかなり些細なことですが。NSWorkspaceは、多くのことに関する通知を投稿します。その中には、アプリケーションの非表示やアクティブ化などについて知りたいことがすべて含まれています。取得できるすべての通知については、こちらのクラスのドキュメントをご覧ください。

基本的に、あなたがしなければならないのは、それらの通知を受け取る小さなバックグラウンドアプリケーションを書くことだけです。そうすれば、あなたはそれらを使って好きなことをすることができます。以下のような単純な呼び出しは、すべての通知に登録し、「nsworkspaceNotification:」メソッドの単純な「ifステートメント」を使用して、受信している通知を特定し、それらに対してアクションを実行できるようにします。 。

[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(nsworkspaceNotification:) name:nil object:nil];
于 2013-01-02T01:16:40.047 に答える
0

トリガーをセットアップする方法は、http://www.dssw.co.uk/blog/2011/01/28/how-to-run-an-applescript-when-switching-to-battery-power/です。

次のスクリプトは、現在最小化されているすべてのアプリケーションを取得します (何らかの理由で Finder を除く、明確なバグ)。間隔を置いて実行するように設定することも、バックグラウンドで継続的に実行するように設定することもできます (パフォーマンスに影響します)。私は想像します)、うまくいけば、解決策に少し近づくことができます(もちろん、これはウィンドウの問題の状態変更のトリガーに実際には取り組んでいないことを認識しています)

property top5 : {"None", "None", "None", "None", "None"}
property oldest : 0


tell application "System Events" to set _list to (name of application processes)

repeat with i from 1 to number of _list
    set current_name to item i of _list

    if top5 does not contain current_name then
        tell application "System Events" to tell application process current_name to set win_num to (number of every window)
        if not win_num is 0 then
            try
                tell application current_name
                    set _windows to every window
                    repeat with i from 1 to number of _windows
                        set this_window to item i of _windows

                        try
                            log "mini"
                            if miniaturized of this_window is true then
                                my addNewToTop5(current_name)
                                exit repeat
                            end if
                        end try

                        try
                            log "collapsed"
                            if collapsed of this_window is true then
                                my addNewToTop5(current_name)
                                exit repeat
                            end if
                        end try

                    end repeat
                end tell
            end try
        end if

    end if

end repeat

log top5

on oldestOfTop5()
if oldest is 5 then
    set oldest to 1
else
    set oldest to oldest + 1
end if
return oldest
end oldestOfTop5

on addNewToTop5(_item)
set item oldestOfTop5() of top5 to _item
end addNewToTop5
于 2013-01-01T16:04:26.213 に答える