マルチディスプレイ環境でウィンドウをとなりのディスプレイに送る
From Usipedia
ディスプレイ1に表示されているウィンドウを一発でディスプレイ2に移動させるスクリプトです。既にこれと同じような機能を持つソフトウェアはありますが、動作が重いので作ってみました。
よく調べてみたらWinSplit Revolutionというウィンドウの移動だけでなく整列までサポートしている軽快なソフトウェアがありました.こっちの方が便利です.
Contents |
操作方法
Win + j でアクティブウィンドウを隣りのディスプレイに移動
スクリプト
;; ;; モニタ情報を取得する ;; GetMonitor() { global SysGet, MonitorCount, MonitorCount Loop, %MonitorCount% ; %A_Index%は初期値1, ループの最後に1++ { SysGet, Monitor, Monitor, %A_Index% ; Left, Top, Right, Bottomが変数の一番後ろに置かれてしまうので指定しやすいようにする MonitorLeft%A_Index% := MonitorLeft MonitorTop%A_Index% := MonitorTop MonitorRight%A_Index% := MonitorRight MonitorBottom%A_Index% := MonitorBottom } } GetMonitor() ;起動時にだけ実行する ;; ;; アクティブウィンドウの情報を取得して、どこのモニタにあるのか判断 ;; WhereIsActive() { global WinGetActiveStats, nTitle, nWidth, nHeight, nX, nY WinGet, Jou, MinMax,%nTitle%,,, nX += 4 nY += 4 Loop, %MonitorCount% { if(nX >= MonitorLeft%A_Index% && nY >= MonitorTop%A_Index% && nX < MonitorRight%A_Index% && nY < MonitorBottom%A_Index%) Return %A_Index% } } ;; ;; ディスプレイからディスプレイにアクティブウィンドウを移動させる ;; DisplayMove(Title,Width,Height,X,Y,src,dest,Jou) { if(Jou) { WinRestore,%Title% WinMove, %Title%,, MonitorLeft%dest%, MonitorTop%dest% WinMaximize,%Title% } else { Xzouka := MonitorLeft%dest%+X-MonitorLeft%src%-4 Yzouka := MonitorTop%dest%+Y-MonitorTop%src%-4 Wzouka := Width Hzouka := Height WinMove, %Title%,, Xzouka, Yzouka, Wzouka, Hzouka,, } } $#j:: w := WhereIsActive() if(w < MonitorCount) DisplayMove(nTitle,nWidth,nHeight,nX,nY,w,w+1,Jou) else DisplayMove(nTitle,nWidth,nHeight,nX,nY,w,1,Jou) Return
高校二年生の9月に書いたのですが,今見ると関数・変数の命名がひどすぎますね・・・
FAQ
移動時にディスプレイの大きさの比率に応じてウィンドウサイズを変えたい
WzoukaとHzoukaを次のように変更して下さい.
Wzouka := (Width/(MonitorRight%src%-MonitorLeft%src%))*(MonitorRight%dest%-MonitorLeft%dest%) Hzouka := (Height/(MonitorBottom%src%-MonitorTop%src%))*(MonitorBottom%dest%-MonitorTop%dest%)
キーボードから終了出来るようにしたい
ファイルの末尾に次のスクリプトを加えて下さい。Win + k で終了します。
$#k:: MsgBox, 4,, スクリプトを終了しますか?, IfMsgBox, Yes ExitApp Return