AppleScriptでデスクトップのサイズを取得する
2011-12-14追記
[twitter:@Piyomaru] さんに教えていただき、system_profiler SPDisplaysDataTypeから取る方法で落着しましたー
が、bounds of window of desktopで取れないのは未だ謎です。。。
手元のMac OS X 10.7.1, AppleScript 2.2.1にて、bounds of window of desktopでデスクトップのサイズが取れない件。雪なしLeopardのときはこれで取れたんだけど。。。と、思って試してみたら、Leopardでもダメになってました。。。
仕方ないんで、ぐぐって
- Safariを起動してJavaScript使って取得する
- shellでdefaults readを実行して取得する
- ただしdefaults readだと、外部モニタが繋がってるかどうかわからないので、外部モニタあり/なしの条件分岐ができない
って方法ではできたんですが、なんかいい方法ないのすかね?というお話です。
global screenWidth
global screenHeight
-- ★これがよさげー
tell (do shell script "/usr/sbin/system_profiler SPDisplaysDataType | grep Resolution | tail -n 1") to set {screenWidth, screenHeight} to {word 2, word 4}
display dialog "system_profiler: " & screenWidth & "x" & screenHeight
tell application "Safari"
-- OK
set screenWidth to (do JavaScript "screen.availWidth" in document 1)
set screenHeight to (do JavaScript "screen.availHeight" in document 1)
display dialog "Safari: " & screenWidth & "x" & screenHeight
end tell
-- うごかん
-- error "System Events でエラーが起きました:scroll area 1 of process \"Finder\" を取り出すことはできません。正しくないインデックスです。" number -1719 from scroll area 1 of process "Finder"
try
tell application "System Events" to set {rightLimit, bottomLimit} to size of scroll area 1 in process "Finder"
display dialog rightLimit & "x" & bottomLimit
on error number ex
display dialog "[ERROR] scroll area of Finder: " & ex
end try
tell application "Finder"
-- OK だけど、外部ディスプレイがつながっているかどうかわからない
set screenWidth to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Width | head -n 1") as number
set screenHeight to word 3 of (do shell script "defaults read /Library/Preferences/com.apple.windowserver | grep -w Height | head -n 1") as number
display dialog "shell: " & screenWidth & "x" & screenHeight
-- NG
-- error "Finder でエラーが起きました:bounds of window of desktop を取り出すことはできません。" number -1728 from bounds of window of desktop
try
set theScreen to bounds of window of desktop
set screenWidth to item 3 of theScreen
set screenHeight to item 4 of theScreen
on error number ex
display dialog "[ERROR] window of desktop: " & ex
end try
end tell

