指定座標がどのディスプレイ上に表示されているかをIDで返すAppleScriptです。
試しに、Finderの最前面のウィンドウの始点座標を取得して、どのディスプレイ上に表示されているかを地道にループで計算しています。
0はメニューを配置しているメインディスプレイで、その後のIDについてはNSScreen’s screens()の出現順に割り振られています。
MacBook Pro 10,1にディスプレイ3枚接続して(通常状態)、さらにUSB経由でiPadをDuet Displayで外部ディスプレイ化。4枚のディスプレイで動作確認しています。
本来、どのディスプレイ上にあるかをきっちり判定できるはずなのですが、最後のIDのものだけうまく判定できていないので例外処理しています。
このあたりの動作内容が怪しかったので、ながらく放置状態になっていましたが、実際にディスプレイを4枚つないで動作確認してみたら大丈夫そうだったので掲載することに。
AppleScript名:指定Finderウィンドウがどのディスプレイ上に表示されているかをIDで返す(0はじまり).scptd |
— Created 2015-11-01 by Takaaki Naganoya — 2015 Piyomaru Software use AppleScript version "2.4" use scripting additions use framework "Foundation" use framework "AppKit" tell application "Finder" if (count every window) = 0 then return tell front window set {xPos, yPos} to position log {xPos, yPos} end tell end tell set dispID to getPointInWhichScreen(xPos, yPos) of me –指定座標がどのディスプレイ上に表示されているかをIDで返す(0はじまり。0はメインディスプレイ) on getPointInWhichScreen(xPos, yPos) set dList to getScreensResol() of me set aPoint to current application’s NSMakePoint(xPos, yPos) set dCount to 0 repeat with i in dList set dRes to current application’s NSPointInRect(aPoint, i) as boolean if dRes = true then return dCount end if set dCount to dCount + 1 end repeat return dCount – 1 –ちょっと怪しいが、動作している様子 end getPointInWhichScreen on getScreensResol() set dispList to (current application’s NSScreen’s screens()) as list set dList to {} repeat with i in dispList set framePref to i’s visibleFrame() set {xPos, yPos} to first item of framePref set theInfo to (i’s deviceDescription()’s NSDeviceSize) as record set a1Rect to {origin:{x:xPos, y:yPos}, |size|:theInfo} set the end of dList to a1Rect end repeat return dList end getScreensResol |
More from my site
(Visited 55 times, 1 visits today)