bgpict2.png 
わかばマークのMacの備忘録
初心者による Mac OSX の便利な使い方や、ソフトウェアの紹介など、Macのこといろいろ。

2023 / 09

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 



http://wakabamac.blog95.fc2.com/blog-entry-992.html

Task3 / タスクの設定例(3)
icn_Task3.jpg
Task3 : あらゆるタスクを自動化する
Growl対応
OS10.4.11以上(UB)
シェアウェア ¥1,500(銀行振込)、¥1,700(PayPal)


Task3 / タスクの設定例(2)』のつづき
この回では、主にウインドウ制御に関するタスクの設定例です。

(各項目へジャンプします)




t3_os9_window

1つのウインドウクリックで そのアプリすべてのウインドウを前面に表示させる


OS9風に、あるアプリケーションの1つのウインドウをクリックすると、そのアプリすべてのウインドウを前面に表示させるようにする方法です。

例えば Finder のウインドウをそのように制御する場合は、新規タスクを作成して下のように設定します。


(トリガー)
090916tsk39.gif

リストから「アプリケーションを監視」を選択して、Finder が「最前面に移動」したときに実行するようにします。


(アクション)
090916tsk40.gif

アップルスクリプトを実行」を選択して、下の AppleScript を入力します。
tell application "Finder" to activate

これでこのタスクを保存して有効にすると、Finder の1つのウインドウ(デスクトップも含む)をクリックしたときに、Finder のすべてのウインドウが前面に表示されるようになります。

例えば、下のようにSafariが最前面にあるときに、背面のFinderウインドウの1つをクリックします。
090624klk6.jpg

すると、Finderのすべてのウインドウが前面に表示されるようになります。
090624klk7.jpg

Finderなら、デスクトップのどこかをクリックしても、すべてのFinderのウインドウを前面に表示します。



トリガーのアプリケーションや、AppleScript の記述の "Finder" を別のアプリケーション名に置き換えれば、他のアプリケーションも同様にできます。

ツールウインドウが普通のウインドウと同じように表示される「Gimp」などでは、この機能がないとかなり使いづらいです。
(X11で動くGimpの場合「X11」を最前面にするように設定する)





t3_window_hide

アプリケーションが最前面でないときはウインドウを隠す


Twitterクライアントのアプリケーション「夜フクロウ」を使っていてよく思うのですが、この手のアプリケーションは Growl でタイムラインを表示しているので、つぶやく時以外はウインドウは邪魔で command+H で隠していることが多いです。

こんな風に自分が能動的に使用するとき以外は、そのアプリケーションのウインドウを隠したい場合、Task3 で最前面以外のときに自動で隠すようにできます。

新規タスクを作成して、下のように設定します。


(トリガー)
リストで「アプリケーションを監視」を選択し、
「YoruFukurou」が「バックグラウンドに移動」したときに実行するようにします。


(アクション)
下の AppleScript を実行するようにします。
tell application "System Events" to tell process "YoruFukurou" to set visible to false

このタスクを保存すると、夜フクロウを使っているときに、他のアプリケーションのウインドウをクリックして最前面でなくなったときに自動で隠れるようになります。


(YoruFukurou が最前面のとき)
090916tsk41.gif

(YoruFukurou が背面に移動したとき)
090916tsk42.gif
こんな風に自動的に隠れます。



トリガーのアプリケーションや AppleScript のプロセス名の "YoruFukurou" のところを他のアプリケーション名に変えて設定すると、他のアプリケーションでも同じようにできます。






t3_hide_others

特定のアプリが最前面になったとき、他のアプリを隠す


集中して作業を行いたいときなど、特定のアプリケーションが最前面になったときに、それ以外の他のアプリケーションのウインドウを隠すようにしてみます。

Task3 で新規タスクを作成して、次のように設定します。


(トリガー)
090916tsk43.gif

アプリケーションを監視」をリストで選択し、○○○が「最前面に移動」したときに設定します。

そのアプリケーションが最前面になったときに動作するアプリケーションを指定します。適用させたいアプリケーションごとに複数のトリガーを設定しておきます。

ここの例では、MacNote3 と Safari に設定してみます。


(アクション)
次の AppleScript を実行するようにします。
tell application "System Events"
set notFrontmostApp to name of every application process whose background only is false and frontmost is false
repeat with eachAppProcess in notFrontmostApp
tell application process eachAppProcess to set visible to false
end repeat
end tell

このタスクを保存して有効にすると、そのアプリが最前面に移動したときに、他のアプリのウインドウを隠します。


例えば、下のようにたくさんのウインドウを開いているときに、MacNote3 を最前面にしてみます。
090916tsk44.jpg


すると、MacNote3 が最前面になるとすぐに、それ以外のアプリケーションのウインドウが隠れます。
090916tsk45.jpg



Task3 とは関係ないことですが、似たようなことで、Dockのアプリケーションアイコンをクリックしたときに、それ以外のアプリケーションを隠す「シングルアプリケーションモード」とうものも、OSの隠し機能として存在するようです。
参考『シングルアプリケーションモード - soundscape out






t3_auto_hide_others

一定時間ごとにチェックして 最前面のアプリ以外のウインドウを自動的に隠す


上記の「特定のアプリが最前面になったとき、他のアプリを隠す」と似た内容ですが、一定時間ごとにアプリケーションの状態をチェックして、最前面以外のアプリのウインドウを隠すタスクを設定してみます。
(ちょうど「Spirited Away」の機能を Task3 で実現してみます。)

新規タスクを作成して、下のように設定します。


(トリガー)
繰り返し」を選択して、3分ごとに実行するように設定。
(時間間隔はお好みで)


(アクション)
次の 最前面以外のプロセスを隠す AppleScript を実行させます。
property excludeAppList : {"Finder", "Safari", "firefox-bin"}
-- 除外アプリケーションのプロセス名を、上の行の {} 内に入力する
-- "プロセス名" と引用府で囲って、「,」で区切って入力
-- Firefox のように アプリ名 とプロセス名 が異なるものもあるので注意。

tell application "System Events"
set notFrontmostApp to name of every application process whose background only is false and frontmost is false
repeat with eachAppProcess in notFrontmostApp
if excludeAppList does not contain eachAppProcess then
tell application process eachAppProcess to set visible to false
end if
end repeat
end tell
先頭の行の {} 内に、背面であっても隠さないアプリケーションのプロセス名を、に入力して保存します。
この例では Finder, Safari, Firefox は最前面に表示されていなくても、自動的に隠されることはありません。


このタスクを保存して有効にします。

例えば、いろいろなアプリケーションのウインドウを開いている状態で、Safari を最前面に表示しているとします。
090916tsk50.jpg

これで所定の時間が来ると、最前面の Safari 以外のアプリのウインドウは隠されます。
090916tsk51.jpg
(背面にある Finder のウインドウは AppleScript 上で「除外」アプリに指定しているので隠されない)






t3_dock_autohide

特定のアプリが最前面のときだけ Dock を表示させる


僕は Dockを「自動的に隠す」設定にしていて、普段は Dock を隠しているようにしています。しかし、Dock にドラッグ&ドロップするときなど、特定のアプリケーションの場合には、ずっと表示させておいた方が便利な場面もあります。

そこで Task3 を使って、2つのタスクを登録しし、特定のアプリが最前面のときだけ Dock を表示させるようにします。


例えば、Finder が最前面のときだけ Dock を表示させるように設定します。
まずは「Dock を表示させる」タスクから。

(トリガー)
アプリケーションを監視」を選択して、Finder が最前面に移動したときに設定します。
090916tsk39.gif
(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリが最前面に移動したときに設定します)


(アクション)
以下の AppleScript を実行するようにします。
-- Dock を表示する
repeat 3 times
set dockAutohide to do shell script "defaults read com.apple.dock autohide"
if dockAutohide is "1" then
tell application "System Events" to tell process "WhateverItIs" to key code 2 using {option down, command down}
end if
end repeat

まずはこの1つ目のタスクを作成し、もう一つ新規タスクを作成します。



2つ目の「Dock を隠す」タスク
(トリガー)
アプリケーションを監視」を選択して、Finder がバックグラウンドに移動したときに設定します。
090916tsk68.gif
(他にもDockを表示させたいアプリがあるなら、複数のトリガー項目を作って、そのアプリがバックグラウンドに移動したときに設定します)


(アクション)
以下の AppleScript を実行するようにします。
-- Dock を隠す
repeat 3 times
set dockAutohide to do shell script "defaults read com.apple.dock autohide"
if dockAutohide is "0" then
tell application "System Events" to tell process "WhateverItIs" to key code 2 using {option down, command down}
end if
end repeat


これらの2つのタスクを有効にして保存します。
すると、Finder が最前面でないときは、Dock は隠された状態です。
090916tsk69.jpg

Finder が最前面のアプリケーションになると
090916tsk70.jpg
Dock が表示されるようになります。


ただ、key codeoption+command+D のショートカットキーを入力しているだけのスクリプトなので、素早く最前面のアプリケーションを切り替えたときなど、失敗することが多いです。
killall Dock でDock を再起動させながら 初期設定ファイルを書き換える内容のスクリプトにすると、失敗することはほぼ無くなるけど、Dashboard も再起動されてしまうので採用せず)






t3_itunes_toggle_player

iTunes が最前面のときはウインドウ表示、背面に移動したはミニプレイヤー表示


(Task3 の作者の sekn さん のアイデア)
iTunes が最前面に移動したときにはブラウザウインドウを表示、背面に移動したときにはミニプレイヤー表示させるように、2つのタスクを作成して実現させます。

まずは iTunes が最前面になったときにタスク
(トリガー)
アプリケーションを監視」で
iTunes が最前面に移動したときに設定します。


(アクション)
以下の AppleScript を実行します。
tell application "iTunes" to set minimized of window 1 to false

('09/11/04修正)
tell application "iTunes"
repeat with aWindow in browser windows
set minimized of aWindow to false
end repeat
end tell




続いて iTunes が背面になったときにタスク
(トリガー)
アプリケーションを監視」で
iTunes がバックグラウンドに移動したときに設定します。


(アクション)
以下の AppleScript を実行します。
tell application "iTunes" to set minimized of window 1 to true

('09/11/04修正)
修正前の AppleScript では、iTunes をメニューから終了できない欠陥がりました。
(詳細はコメント欄参照。sekn さん、教えてくれてありがとう)
以下の内容に変更して下さい。
tell application "System Events" to set appList to name of every application process whose background only is false
if appList contains "iTunes" then
tell application "iTunes"
repeat with aWindow in browser windows
set minimized of aWindow to true
end repeat
end tell
end if




これら2つのタスクを有効にして保存します。

すると、iTunes が最前面に移動したときには、自動的にブラウザウインドウを表示
090916tsk71.jpg


iTunes が背面に移動したときには、自動的にミニプレイヤー表示に切り替わります。
090916tsk72.jpg





この回ではウインドウ制御についてのタスクの設定例でした。
こういった「ウインドウ制御」的な使い方をするときは、そのタスクのON/OFFの切り替えがもっと楽にできたらいいのに・・・と思い、作者の sekn さんにリクエストしてみました。

次回のバージョンアップでは、Task3メニューからそのタスクのON/OFFの切り替えができるようになるでしょう。(たぶん?)
090916tsk80.gif





Task3 / タスクの設定例(4)』につづく







この記事では Task3 version 1.1.0 を使用しています。

(ダウンロードリンク)
Site top page : Spread Your Wings
Download page : Task3



(関連記事)
Task3 --- 基本的な「タスク」の設定のやり方など

Task3 / タスクの設定例(1)
Task3 / タスクの設定例(2)
Task3 / タスクの設定例(3)
Task3 / タスクの設定例(4)

edit

Utility | CM:2 | TB:0

tag : Task3 

+




iTunesのミニプレイヤー表示 ---------- sekn | URL 2009/11/04, 01:13 | edit
iTunesのミニプレイヤー表示ですが、単にtell app "iTunes"だとiTunesをメニューから終了できなくなると思います。
終了を選択→iTunesが「終了前に」バックグラウンドに移動→Task3がスクリプトを起動→スクリプトが走る前にiTunesが終了→時間差でtell app "iTunes"が走って終了したiTunesが復活
Task3にiTunes起動中という条件を設定しても、Task3が移動を感知した瞬間は確かにiTunesが生きているのでダメで、
スクリプトの方でiTunesの生死を確認する必要があります
面倒ですがこんな感じ

set isRunning to "Not Running"
tell application "Finder"
set appList to every process that file type is "APPL"
repeat with anApp in appList
if (name of anApp as text) is "iTunes" then
set isRunning to "running"
end if
end repeat
end tell

if isRunning is "running" then
tell application "iTunes"
repeat with aWindow in browser windows
set the minimized of aWindow to true
end repeat
end tell
end if

タスクのオンオフはメニューバーから切り替えるようになります。
(コマンドキーを押しながら選択するとトグル)
あとスクリプトでも切り替えられるようにしたので、タスクに組み込んでホットキーやその他の条件と組み合わせて切り替えることもできます。
ますます設定がややこしくなりますね・・・

---------- wakaba | URL 2009/11/04, 23:13 | edit
> sekn さん、こんばんは。

ありがとうございます。
テスト不足でした。


タスクのオンオフはメニューバーから切り替えるようになります。
(コマンドキーを押しながら選択するとトグル)
あとスクリプトでも切り替えられるようにしたので、タスクに組み込んでホットキーやその他の条件と組み合わせて切り替えることもできます。
ますます設定がややこしくなりますね・・・

Task3本体を起動中に各タスクのON/OFFをトグルした場合の、本体でのそのタスクの処理が難しそうですね。


管理者にだけ表示を許可する
 

trackback URL