AppleScript (またはおそらく他のスクリプト) が、他の (関係のない) アプリケーションの状態が変化したとき、つまり閉じる、最小化したときに通知を受け取ることはまったく可能ですか? 目標は、最近閉じた、または最小化された 5 つのアプリケーションのリストを維持することです。
2 に答える
あなたは本当にapplescriptでこれを行うことはできません。あなたがobjective-cを知っているなら、それはかなり些細なことですが。NSWorkspaceは、多くのことに関する通知を投稿します。その中には、アプリケーションの非表示やアクティブ化などについて知りたいことがすべて含まれています。取得できるすべての通知については、こちらのクラスのドキュメントをご覧ください。
基本的に、あなたがしなければならないのは、それらの通知を受け取る小さなバックグラウンドアプリケーションを書くことだけです。そうすれば、あなたはそれらを使って好きなことをすることができます。以下のような単純な呼び出しは、すべての通知に登録し、「nsworkspaceNotification:」メソッドの単純な「ifステートメント」を使用して、受信している通知を特定し、それらに対してアクションを実行できるようにします。 。
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver:self selector:@selector(nsworkspaceNotification:) name:nil object:nil];
トリガーをセットアップする方法は、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