カテゴリ:├バカスクリプト( 15 )
|
最前面のアプリケーションに命令する
たまにしか覗かないツイッターの、たまたま覗いたタイムラインにたまたまこういうツイート

「今最前列にあるウィンドウ以外のすべてのウィンドウを閉じる」という指示をMacOSX SnowLeopard上でだすにはどうしたらいいかねえ。

を見かけて、ちょっと興味を持った。 AppleScript にはどうも「最前面のアプリ名を取得する命令」というのがあるらしい。そんならとりあえず「最前面のアプリの、最前面以外のすべてのウィンドウを閉じる(他のアプリには無力)」というスクリプトはできるわけだ。

tell application "System Events"
set front_app to name of (path to frontmost application)
end tell
tell application front_app
try
repeat 20 times
close window 2
end repeat
end try
end tell

「2番目のウィンドウを閉じよ」というのを何回も繰り返すことで、結果的に最前面以外のウィンドウをすべて閉じる。バカみたいだけど間違ってはいない。10.5 で、少なくとも Finder と Safari では有効。mi では機能しない。Finder で使うと案外便利。

これは

最前面のアプリを取得する(Aとする)
Aに tell
  try
    20回繰り返せ
      「2番目のウィンドウを閉じよ」(×20)
    繰り返し終わり
  end try
end tell

という感じなんだけど、これを

最前面のアプリを取得する(Aとする)
A以外の起動中のアプリのうち whose visible is true であるものすべてに tell
  すべてのウィンドウを閉じよ
end tell
Aに tell
  try
    20回繰り返せ
      「2番目のウィンドウを閉じよ」(×20)
    繰り返し終わり
  end try
end tell

とかすることが、できるのかも知れない。
http://www.fsight.co.jp/asqs/practicalscripting/quitapplications.pdf

■後記:
偶然 わかばマークさん で解を発見しました。
「every application process whose background only is false and frontmost is false」。
なるほどねえ。background only というのは 1PasswordAgent だとか Dropbox だとか、
「実行中だけど見えないプロセス」のことか?
frontmost は最前面か。
「background only is false and frontmost is false」で、
見えるプロセスのうち、最前面でないヤツすべて」か。

-- http://wakabamac.blog95.fc2.com/blog-entry-992.html#t3_auto_hide_others
-- +
-- http://www.hw2-suito.com/archives/327
-- http://www.drycarbon.com/applescript/manuals/controls/ctrl_rep.html#times

property excludeAppList : {""}
-- 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
set front_app to name of (path to frontmost application)
end tell

tell application front_app
try
repeat 20 times
close window 2
end repeat
end try
end tell

使ってみたけど、すげー。便利かどうかはよくわからないけど、気持ちいい。
wakaba さんは「ちょうど『Spirited Away』の機能と書いておられるけど、
Spirited Away ではこうはいかない。
[PR]
by nobiox | 2011-10-19 16:33 | ├バカスクリプト |
AppleScriptで今日の日付
AppleScriptで今日の日付を得るのはひじょうに簡単で、「(current date) as string」だけでいい。

display dialog (current date) as string

これを実行すると「2011年 1月 13日 木曜日 3:39:31 PM」みたいな文字列が表示される。
しかしながら、これを元に例えば「11.01.13-15.39」としたいとすると、
マジかよ、ってくらいにおおごとになる。こんな感じ。

property MonthNames : {January, February, March, April, May, June, July, August, September, October, November, December}

on DateToString(theDate)
set Y to ((year of theDate) - 2000) as text
set m to Num2Txt(Month2Num(month of theDate))
set D to Num2Txt(day of theDate)
set h to (time of theDate) div hours
set mi to (time of theDate) mod hours div minutes
set s to (time of theDate) mod minutes
if (count characters of (h as text)) is 1 then set h to "0" & (h as text)
if (count characters of (mi as text)) is 1 then set mi to "0" & (mi as text)
if (count characters of (s as text)) is 1 then set s to "0" & (s as text)
return Y & "." & m & "." & D & "-" & h & "." & mi & "." & s
end DateToString

on Num2Txt(NUM)
return text -2 thru -1 of ("0" & (NUM as text))
end Num2Txt

on Month2Num(m)
repeat with I from 1 to 12
if item I of MonthNames = m then return I
end repeat
end Month2Num

set aName to DateToString(current date)

tell application "Finder"
activate
make new folder at desktop with properties {name:aName}
end tell
個々の行の意味は、僕は理解してない。ただのコピペ。
なんでこんな簡単なことが、こんなに頑張った感じにしないとできない仕様なんだろうか。

「make new folder at desktop with properties {name:YY.MM.DD-HH.MNMN.SS}」

てな感じで出来てもよさそうなもんなのに。
(OS 8や9 の頃はもうちょい簡単だったような記憶がある)
[PR]
by nobiox | 2011-01-13 16:49 | ├バカスクリプト |
デスクトップピクチャを変更 - 3
システム環設定を開かずにデスクトップピクチャを選択→変更するAppleScript のサンプル。僕のテスト環境はOS 10.5。
property commentTags : {"海", "霧", "パセリ"}

set xdr5 to a reference to "HD1:Users:nobio:Pictures:nobitopPictures"
tell application "Finder"
activate
choose from list commentTags with prompt "Select Picture." with multiple selections allowed
set theSelct to result
set theSelct to theSelct as string
if theSelct is "海" then
set desktop picture to document file "海1.jpg" of folder xdr5
end if
if theSelct is "霧" then
set desktop picture to document file "Sea Mist.jpg" of folder xdr5
end if
if theSelct is "パセリ" then
set desktop picture to document file "パセリ03.jpg" of folder xdr5
end if
end tell

[PR]
by nobiox | 2011-01-11 18:47 | ├バカスクリプト |
デスクトップピクチャを変更 - 2
ドラッグした画像をデスクトップピクチャに設定するAppleScript のサンプル。テスト環境はOS 10.5。
on open of theFile
tell application "Finder"
set the_pict to item 1 of theFile
set desktop picture to the_pict
end tell
end open

3行目と4行目をまとめて「set desktop picture to theFile」とすると動かない。
というか、
3行目の「item 1 of」を省略すると動かない。理由は知らない。
[PR]
by nobiox | 2011-01-11 18:46 | ├バカスクリプト |
デスクトップピクチャを変更 - 1
「わかばマークのMacの備忘録」さんで、デスクトップピクチャを変更する AppleScript を学んだので、メモ。システム環設定を開かずに一発でデスクトップピクチャを変更するAppleScript のサンプル。僕のテスト環境はOS 10.5。
set xdr5 to a reference to "HD1:Users:nobio:Pictures:nobitopPictures"
tell application "Finder"
set desktop picture to document file "Quantum Foam.jpg" of folder xdr5
end tell

[PR]
by nobiox | 2011-01-11 18:44 | ├バカスクリプト |
|