なでしこを明後日の方向に

日本語プログラム言語なでしこを応援しています

なでしこ1の「マウス移動」で座標がズレる原因

なでしこ1の「マウス移動」などで指定した位置にマウス移動しない!
または母艦の位置が思った場所に行かない!
という現象があります。

windowsのディスプレイ設定の倍率が100%でないときに発生します。
高解像度のノートPCとかだと、推奨(初期値)が200%になっている模様。

windows10の設定画面より

windows11の設定画面より

試してみた

母艦のX座標を100に指定します。
窓キャプチャで画像を撮り、画像のX=100のところに赤線を引きます。
これをディスプレイの設定100%と150%で実行結果を見比べます。

母艦位置「100,0」 //←母艦のX=100
1秒待つ
AAAとはイメージ
AAA「デスクトップ」窓キャプチャ
線色赤色線太さ2
AAA100,0から100,100 //←画像のx=100のところに赤線

実行結果(なでしこエディタを最大化して実行)

・ディスプレイ100%時

・ディスプレイ150%時

画像の右側の「なでしこ」のウィンドウが母艦です。
赤線と母艦は両方ともX=100を指定していますが、150%にするとずいぶん離れてしまいました。
画像上では母艦はX=150あたりにいます。

つまり、窓キャプチャの画像で調べた座標(X=100)を指定すると、150%ズレた位置(X=150)くらいにいくのです。
スクリーンショットツール+ペイントで調べた座標でも同様です。

このズレはマウス移動でも同様です。
X=100を指定してマウス移動すると、画像上のX=150あたりに行きます。

思った位置(=画像で調べた位置)にマウスカーソルが移動しないことになります。

画像の座標から補正する

画像で調べた位置にマウスカーソルが行くためにはどうしたらよいかと言うと、ディスプレイの設定を見て150%なら100/150(125%なら100/125)を座標に乗算します。

プログラムからディスプレイの拡大率をおしはかる方法は、よくわかりませんでした!

母艦位置「{100*100/150},0」 //←X=100に 100/150 を乗算
1秒待つ
AAAとはイメージ
AAA「デスクトップ」窓キャプチャ
線色赤色線太さ2
AAA100,0から100,100

実行結果

赤線がX=100、右のなでしこウィンドウが母艦(X=100*100/150)

座標を調べなおす場合

前述の通り、画像に撮ってから座標を調べる方法がアテにならないことがわかりました。

自動クリックするプログラムをこれから作る場合、座標は机上マウスX,机上マウスYで調べるとよいです。
これで得られる座標はそのままマウス移動に使えます。

以下のプログラムはキーを押すとマウス移動命令を生成してクリップボードにコピーするプログラムです。

母艦キー押した時
  x=机上マウスX
  y=机上マウスY
  母艦タイトル「{x},{y}」
  「{x},{y}へマウス移動」コピー //プログラム文の生成

本命のプログラムにコピーしたプログラムを貼りつけしていく感じ。