マルチディスプレイでもウィンドウをモニター高さにフィットさせる。

Windowsだと、Shift+Win+↑というショートカットで、ウィンドウを縦方向のみ最大化できる。
大量のファイルを処理したいときやブラウザを縦長に表示したいときにすごく便利なんだけど、縦にモニターを複数置いてると、モニターを跨いで引き延ばされてしまう。(ウィンドウの縁を下までドラッグしても同じ。)
これだと見づらいので、モニターの中だけで最大化したいが、良さげなソフトとか見つからなかった。

しゃーないので、AutoHotkeyで実装してみた。下記スクリプトを実行してから、伸ばしたいウィンドウをアクティブにして、Ctrl+Shift+aを押すと、ウィンドウが縦長に伸ばされる。

^+a::FitAWindowHeightToMon()

;アクティブなウィンドウの縦方向の長さを、モニターのタスクバーを除いたエリア最大まで引き延ばす。
FitAWindowHeightToMon(){
	WinGetPos, WinX, WinY, Width, Height, A
	AMonNo:=getAWinMonitorNo()
	SysGet, monW, MonitorWorkArea, %AMonNo%
	WinMove,A,,WinX,monWtop, Width, monWbottom - monWtop + 7
}

;アクティブウィンドウの中心があるモニターの番号を返す。
getAWinMonitorNo(){
	WinGetPos, WinX, WinY, Width, Height, A
	return getMonitorNo(WinX+Width/2,WinY+Height/2)
}
getMonitorNo(PosXA,PosYA){
	SysGet, numberOfMonitors, MonitorCount
	Loop, %numberOfMonitors%
	{
		SysGet, mon, Monitor, %A_Index%
		if ( monleft <= PosXA ) && ( PosXA < monright ) && ( montop <= PosYA ) && ( PosYA < monbottom ){
			ActiveMonitor := A_Index
			break
		}
	}
	return ActiveMonitor
}

取り合えず、これでOK。

若干良く分からないのは、自分の環境だと、縦方向の長さを+7しないとウィンドウが正しく伸ばされなかったこと。

後は、Windowsの設定→システム→マルチタスク
でウィンドウのスナップのチェックを外せば、標準のショートカットが機能しなくなるので、自分でShift+Win+↑とかAHKで割り当てるといいと思います。

 

コメントを残す

メールアドレスが公開されることはありません。