AutoHotkey でメニューの表示位置がずれる時は CoordMode を調べること
以下のようにポップアップメニュー popupmenu1 を表示するスクリプトを書いていたのだが、
; <<< メニューつくってるところは割愛 >>> ; プライマリモニタの中央座標を取得 posobj := get_display_center_pos() showx := posobj.x showy := posobj.y ; 取得した中央位置でメニューを表示 Menu, popupmenu1, Show, %showx%, %showy%
メニュー表示位置がどうも中央位置からずれる。見た感じ アクティブウィンドウ次第で位置が変化している ように見える。何が起きているのだろう?とハマっていた。
原因
原因は単純で、 CoordMode という「座標指定時の基準値をどこにするのか」設定が スクリーン上での絶対位置になってなかった から。
AutoHotkey ではこれがデフォルトでは「アクティブウィンドウの左上からの相対座標」になっている。なので、上記のコードは実質
; activewindow_x, activewindow_y が ; アクティブウィンドウ左上座標を表しているとする Menu, popupmenu1, Show, %showx% + activewindow_x, %showy% + activewindow_x
こうなっているに等しい。
解決
以下のように CoordMode Menu, Screen
にて「スクリーン上での絶対位置にする」設定を明示的に指定する。
; デフォは座標指定がアクティブウィンドウ相対になっているので ; スクリーン絶対に直す. CoordMode Menu, Screen Menu, menuname1, Show, %showx%, %showy%