自宅時間が増え、自宅パソコンをいじる機会が多くなったので、これを機にパソコンの作業環境を整える。
まずは、ウィンドウ操作関連のショートカットの整備する。以前にAutohotkeyのスクリプトを作成してから、かなりの期間がたっており、状況も変わっていると思うので、スクリプトを作りなおしてみた。
スクリプトの内容は以下。
;=================================================================== ; アクティブウィンドウのあるモニタを情報を返却する。 ;=================================================================== GetCurrentMonitor(x,y,w,h){ SysGet, MonitorCount, MonitorCount Loop, %MonitorCount% { SysGet, MonitorWorkArea, MonitorWorkArea, %A_Index% if(x+w/2 >= MonitorWorkAreaLeft AND x+w/2 <= MonitorWorkAreaRight){ if(y >= MonitorWorkAreaTop AND y <= MonitorWorkAreaBottom){ ;モニタの左上とセンタの座標を求める if(MonitorWorkAreaLeft<MonitorWorkAreaRight){ MonitorW:=MonitorWorkAreaRight-MonitorWorkAreaLeft CenterX:=MonitorWorkAreaLeft+(MonitorWorkAreaRight-MonitorWorkAreaLeft)/2 } else{ MonitorW:=Abs(MonitorWorkAreaLeft)-Abs(MonitorWorkAreaRight) CenterX:=MonitorWorkAreaLeft+(Abs(MonitorWorkAreaLeft)-Abs(MonitorWorkAreaRight))/2 } if(MonitorWorkAreaTop<MonitorWorkAreaBottom){ MonitorH:=MonitorWorkAreaBottom-MonitorWorkAreaTop CenterY:=MonitorWorkAreaTop+(MonitorWorkAreaBottom-MonitorWorkAreaTop)/2 } else{ MonitorH:=Abs(MonitorWorkAreaTop)-Abs(MonitorWorkAreaBottom) CenterY:=MonitorWorkAreaTop+(Abs(MonitorWorkAreaTop)-Abs(MonitorWorkAreaBottom))/2 } Return % MonitorWorkAreaLeft . " " . MonitorWorkAreaTop . " " . MonitorW . " " . MonitorH . " " . CenterX . " " . CenterY . " " . A_Index } } } } ;=================================================================== ; fvwm風ウィンドウ制御(マルチモニタ対応) ;=================================================================== ^+!i:: ^+!k:: ^+!j:: ^+!Left:: ^+!Right:: ^+!UP:: ^+!DOWN:: WinGet,id,ID,A WinGetPos,x,y,w,h,A String := GetCurrentMonitor(x,y,w,h) Array := StrSplit(String, A_Space) MonitorX := Array[1] MonitorY := Array[2] MonitorW := Array[3] MonitorH := Array[4] CenterX := Array[5] CenterY := Array[6] MonitorNum := Array[7] if(x%id%=""){ ; ウィンドウが操作管理対象外の場合 x%id% := x y%id% := y w%id% := w h%id% := h m%id% := MonitorNum Switch A_ThisHotkey { Case "^+!i": ;縦拡大 if(x%id%+w%id%/2 < CenterX){ ;左 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH } Else{ ;右 WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH } Case "^+!k": ;横拡大 if(y%id%+h%id%/2 < CenterY){ ;上 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2 } Else{ ;下 WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2 } Case "^+!j": ;全画面 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH Case "^+!Left": WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH Case "^+!Right": WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH Case "^+!UP": WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2 Case "^+!DOWN": WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2 } } Else{ ;ウィンドウが操作管理対象の場合 if(A_ThisHotkey = "^+!i" or A_ThisHotkey = "^+!k" or A_ThisHotkey = "^+!j"){ if(MonitorNum != m%id%){ ; モニタ番号が変わった x%id% := x y%id% := y w%id% := w h%id% := h m%id% := MonitorNum Switch A_ThisHotkey { Case "^+!i": ;縦拡大 if(x%id%+w%id%/2 < CenterX){ ;左 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH } Else{ ;右 WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH } Case "^+!k": ;横拡大 if(y%id%+h%id%/2 < CenterY){ ;上 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2 } Else{ ;下 WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2 } Case "^+!j": ;全画面 WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH } } Else{ ; モニタ番号が同じ ;元のポジションに戻してウィンドウを忘れる WinMove,ahk_id %id%,,x%id%,y%id%,w%id%,h%id% x%id%= y%id%= w%id%= y%id%= m%id%= } } Else{ ; 方向キーの場合 Switch A_ThisHotkey { Case "^+!Left": WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW/2,MonitorH Case "^+!Right": WinMove,ahk_id %id%,,CenterX,MonitorY+4,MonitorW/2,MonitorH Case "^+!UP": WinMove,ahk_id %id%,,MonitorX,MonitorY+4,MonitorW,MonitorH/2 Case "^+!DOWN": WinMove,ahk_id %id%,,MonitorX,CenterY+4,MonitorW,MonitorH/2 } } } return ;拡張デスクトップの切り替え ^Left::#^Left ^Right::#^Right ^Up::#^Left ^Down::#^Right以前のスクリプトでは画面サイズをハードコーディングしていたが、自動取得するAPIを発見したため、それに変更してみた。
あと、ウィンドウの移動とサイズ変更方法をWindowsの「Winキー+矢印」っぽくしてみた。使用方法は以下。
Ctrl+Shift+Alt+i ウィンドウ縦拡大 Ctrl+Shift+Alt+k ウィンドウ横拡大 Ctrl+Shift+Alt+j ウィンドウ全画面 Ctrl+Shift+Alt+← ウィンドウ左寄せ Ctrl+Shift+Alt+→ ウィンドウ右寄せ Ctrl+Shift+Alt+↑ ウィンドウ上寄せ Ctrl+Shift+Alt+↓ ウィンドウ下寄せ Ctrl+← 仮想デスクトップ切り替え左 Ctrl+→ 仮想デスクトップ切り替え右 Ctrl+↑ 仮想デスクトップ切り替え左 Ctrl+↓ 仮想デスクトップ切り替え右
拡大中のウィンドウ選択時に特定のショートカットを入力すると元のサイズと位置に戻る。
あと、拡張デスクトップの切り替えをCtrl+矢印でできようにホットキーを変更している。
マルチモニターには一応対応させてつもり。誤動作するかもしれません。ご注意を。スクリプトの文字コードはUTF-8にしてください。
0 件のコメント :
コメントを投稿