私は MacBookPro (2012、Retina ディスプレイ以前の最後のバージョン) で外部モニターを使用しています。
外部モニターに接続しなくても、MacBook の解像度は 1440x900 で、問題ありません。
自宅では、同じ解像度の外部モニター(およびミラーディスプレイ)に接続します。これは素晴らしいことです。
しかし、学校に来てラボ(およびミラーディスプレイ)でセットアップすると、下のスクリーンショットに示すように、最大解像度が 1280x900 の外部モニターに接続します。
問題は、解像度の幅が失われると、画面全体を占有するようにズームインされたすべてのアプリケーション (左上隅の緑のボタンを使用) が、幅 1440 ピクセルを占有できると認識する傾向があることです。これにより、これらのアプリケーションが外部モニターによって切り取られるという影響があります。
今では、すべてのアプリケーションの開いているウィンドウをすべて切り替えて、この外部モニターのサイズに合わせてサイズを変更する必要があります。さらに、家に帰ったら、1440x900 の解像度でこのプロセスを繰り返す必要があります。
こうした手動によるサイズ変更をすべて回避する方法はありますか (自動化するか、解像度の変更を検出したときに自動的にサイズ変更を実行する AppleScript など)?
私はMac OS X 10.7.5 (Lion)を使用しています。
答え1
あなたの問題を直接解決する方法、つまり、ミラーリング時に小さい方の画面の実際の寸法をアプリケーションに知らせる方法がわかりません。
ただし、私は 2 つのユーティリティ (残念ながら無料ではありません) を組み合わせて使用し、2 つのオフィスと自宅 (それぞれ MacBook Pro に接続されたモニターの組み合わせが異なります) 間の移動を管理しています。
彼らです:
整える (Trifle Apps より)
滞在する (コードレスドッグ)
そのため、Arrange はウィンドウを正確な場所に素早く移動できるようにし (キーボード ショートカット、ホット コーナー、または視覚グリッドなど、お好みに応じて)、複数のモニターを認識します。Stay はこれらの配置を構成ごとに保存します。そのため、モニター X がウィンドウ A と B の両方が特定のサイズであることを意味することを学習すると、次回はそれを記憶し、モニター Y でサイズが異なる場合は、そのモニターを接続したときにサイズが変更されます。
どちらも無料トライアルがあるので、試してみて効果があるかどうか確認してみてください。無料の解決策を提供できず申し訳ありません。
アップデート
私は現在Spectacleを使用しています(エリック・ツァルニー) を Arrange の代わりに使用しています。これはドネーションウェアであり、私の経験ではより安定しているようです。Arrange ほど洗練されていませんが、必要なことはすべて実行できます。
答え2
Stay は無料ではなく、すべてのアプリを常に処理できるわけではありません (バグがあります)
と手助け、私は完璧に機能するこの AppleScript を思いつくことができました:
property blacklist : {"Finder", "Preview", "Console", "AppleScript Editor", "Spotify", "TaskCoach"}
property buttonApps : {"LyX", "Eclipse"}
property buttonMaps : {{name:"LyX", Button:1, pname:"lyx"}, {name:"Eclipse", Button:2, pname:"eclipse"}}
tell application "Finder" to set theBounds to bounds of window of desktop
tell application "System Events"
set bids to bundle identifier of processes where background only is false
end tell
repeat with bid in bids
tell application id bid
if name is not in blacklist then
set appName to name as string
if name is "Terminal" then
set newBounds to {0, 0, (item 3 of theBounds) - 10, item 4 of theBounds}
repeat with theWindow in windows
if visible of theWindow is true then
say appName
set bounds of theWindow to newBounds
end if
end repeat
else if name is not in buttonApps then
repeat with theWindow in windows
if visible of theWindow is true then
set bounds of theWindow to theBounds
end if
end repeat
else if name is in buttonApps then
-- get the buttonNumber
repeat with buttonApp in buttonMaps
if (name of buttonApp as string) is appName then
set theButton to Button of buttonApp
end if
end repeat
tell application "System Events"
repeat with theProcess in (processes where bundle identifier is bid)
try
tell theProcess to tell window 1 to click button theButton
end try
end repeat
end tell
end if
end if
end tell
end repeat