縦or横にのみ最大化/元に戻す
縦or横にのみ最大化/元に戻す
TTBaseのTMaxという縦方向のみ最大化するプラグインを使っていたけど、AutoHotkeyでできることはAutoHotkeyでやろうと思って作った。作るついでに横方向も実現。あまり使わないけども。
以下スクリプト。Shift+F11で縦に最大化、Ctrl+F11で横に最大化。もう一度キーを押すと元の位置・サイズに戻る。ただ最大化するんじゃなく、元の位置・サイズに戻せるようにしたかったので、hwmax.iniというファイルを作ってそこに記憶することにした。
;一方向に最大化 ;;縦方向 +F11:: WinGetClass, Class, A WinGetPos, , Y, W, H, A WinGet, Maximized, MinMax, A SysGet, WorkArea, MonitorWorkArea If (Maximized = 1) { Return } Else If (H != WorkAreaBottom) { IniWrite, %H%, hwmax.ini, %Class%, h IniWrite, %Y%, hwmax.ini, %Class%, y WinMove, A, , , 0, , %WorkAreaBottom% } Else { IniRead, LastH, hwmax.ini, %Class%, h Iniread, LastY, hwmax.ini, %Class%, y If (LastH != "ERROR") { WinMove, A, , , LastY, , %LastH% } } Return ;;横方向 ^F11:: WinGetClass, Class, A WinGetPos, X, , W, H, A WinGet, Maximized, MinMax, A SysGet, WorkArea, MonitorWorkArea If (Maximized = 1) { Return } Else If (W != WorkAreaRight) { IniWrite, %W%, hwmax.ini, %Class%, w IniWrite, %X%, hwmax.ini, %Class%, x WinMove, A, , 0, , %WorkAreaRight% } Else { Iniread, LastW, hwmax.ini, %Class%, w Iniread, LastX, hwmax.ini, %Class%, x If (LastW != "ERROR") { WinMove, A, , LastX, , %LastW% } } Return
一応やっていることを説明すると、以下のようになる。
- アクティブウィンドウのクラス名、サイズ、位置を取得
- 作業領域(画面の大きさからタスクバー分引いたもの)のサイズを取得
- 最大サイズでなければクラス名、サイズ、位置をhwmax.iniに記憶し、一方向最大化
- 既に最大サイズならば、hwmax.iniからアクティブウィンドウと同じクラス名のサイズ、位置情報を読み込む
- 情報が見つかればそれに従ってリサイズ
情報をクラス名でまとめているので、同じソフトでクラス名が同一のウィンドウを複数開いている場合、情報が上書きされて別々には動作させられない。もっとも、ブラウザもタブ化が標準化しているし、それで困ることはあんまり無いと思うが。
追記(2010/03/06)
(普通の)最大化状態で実行すると、ウィンドウ枠が消える分サイズが変化して挙動が変になるので、最大化状態の時には何もせず終了するようにした。