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