AutoHotkey で起動したコマンドプロンプトウィンドウを画面中央に配置する

ウィンドウ操作の練習も兼ねて書いてみた。

コード

#Left::
  Run, cmd
  WinWait, 管理者:,,0
  WinActivate
  WinGetPos, posx, posy, sizex, sizey, A
  WinMove A,, (A_ScreenWidth/2)-(sizex/2), (A_ScreenHeight/2)-(sizey/2)
Return

コード解説

; Win + Left で開く例(この割り当てに深い意味はない)
#Left::
  ; コマンドプロンプト起動
  Run, cmd

  ; コマンドプロンプトウィンドウが現れるのを待つ(0指定だと0.5秒)
  WinWait, 管理者:,,0

  ; 現れたウィンドウをアクティブ(以後の関数の操作対象)にする
  WinActivate

  ; アクティブウィンドウの位置とサイズを取得
  ; A ← アクティブウィンドウの意
  WinGetPos, posx, posy, sizex, sizey, A

  ; 画面中央に配置する
  ;
  ; 計算は画面座標とウィンドウサイズを使って導出している;
  WinMove A,, (A_ScreenWidth/2)-(sizex/2), (A_ScreenHeight/2)-(sizey/2)
Return

(余談) ウィンドウを画面中央に配置する計算式

ウィンドウサイズを wx, wy、画面サイズを sx, sy とする。

まず画面中央座標は sx/2sy/2 となる。ここにウィンドウをそのまま配置するとどうなるか。……ウィンドウの左上が中央にある、ような位置取りとなっており、ウィンドウが中央に配置されたとは言えない。

じゃあ次はどうするか。ウィンドウを左上方向に向かってずらせばよさそうだ。

ではどの程度ずらせばよいか。それが「ウィンドウサイズのちょうど 1/2 分」である。つまり wx/2wy/2

以上をまとめると、ウィンドウを画面中央に配置するには sx/2 - wx/2sy/2 - wy/2 に配置すればいいことになる。

※図があればわかりやすいが描く気力無かった。。。

参考