マルチディスプレイ環境でウィンドウをとなりのディスプレイに送る

From Usipedia
Jump to: navigation, search

ディスプレイ1に表示されているウィンドウを一発でディスプレイ2に移動させるスクリプトです。既にこれと同じような機能を持つソフトウェアはありますが、動作が重いので作ってみました。

トリプルディスプレイの環境でWinSplit Revolutionを使っている様子

よく調べてみたら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
Namespaces
Variants
Views
Actions
Categories