3年くらい、macroni っていうマクロツールを使ってた。マウスとキーボードの操作を記録して、そのまま繰り返してくれるやつだね。
それがある日、クリックする場所が全然ちがうところになった。
設定を変えた覚えもないし、マクロも直してない。それなのに、押してほしい場所から1000px以上ずれたところをクリックしてる。
原因を追いかけたら、けっこうはっきりした理由が出てきた。しかも1画面の人には絶対に起きない種類のやつだったよ。
この記事では、その原因と、結局わたしが自分でツールを作り直すことになった話を書くね。作ったものは無料で配ってるので、同じところで困ってる人はそのまま使ってもらって大丈夫。
クリック位置がズレる原因は「座標の基準」だった

Windows にマウスの位置を伝えるとき、座標はそのまま渡すんじゃなくて、0〜65535 の値に直してから渡す決まりになってる。
問題はここ。「何を基準に直すか」に2通りあるんだよね。
- プライマリモニタだけを基準にする
- 全部のモニタを合わせた範囲(仮想スクリーン)を基準にする
この2つが食い違うと、クリック位置がズレる。
わたしの環境は4画面で、全部合わせると 6400×1800。でもプライマリは 2560×1080 しかない。この差がそのままズレになって出てた。
| 指定した座標 | 実際に押された場所 | ズレ |
|---|---|---|
| (1955, 801) | (2969, 1335) | +1014, +534 |
| (2370, 740) | (4006, 1234) | +1636, +494 |
ここで大事なのは、1画面だけの環境だと、この2つの基準が一致するってこと。
つまり1画面で使ってる限り、この不具合は永久に起きない。
だから作った人も気づけないんだよね。バグを見つけて報告する側にも回りにくい。「自分の設定が悪いのかな」で終わっちゃうから。
もう1個あった。「待ち時間0」にしても速くならない

ついでに調べてたら、前から気になってたことの答えも出てきた。
待ち時間を 0 にしても、なぜか連打が遅いやつ。
これは Windows 側の仕様で、待機の時間はだいたい 15.6ms 刻みに丸められる。0 と書いても1手ごとに待たされる。
8手の連打だと、合計で約125ms。60fps のゲームで7フレームぶんだよ。そりゃ遅いよね。
直せなかったので、自分で作り直した

原因は分かったけど、使ってたツールは中身をいじれない。
ということで、同じことができるものを自分で作ることにしたよ。MacroLab っていう名前にした。
作り始めたのが 8月28日の15時41分で、GitHub に置いたのが翌朝の11時4分。19時間半だったよ。
もちろん寝てる時間も入ってるけどね。
さっきの2つはこう直した。
- ズレ:内部の座標を全部「仮想スクリーン基準」に統一した。実測で 0〜1px まで収まったよ(4画面ぜんぶ)
- 待ち:実行中だけタイマーの刻みを細かくして、「長い間は寝て、最後の2msだけ空回し」する形にした。1ms待機の平均ズレが 0.009ms になった
あと、macroni のマクロファイル(.mcrn)はそのまま開けるようにしてある。
3年ぶんの資産を捨てなくていいのが、自分にとっては一番大事だったので。
ついでに足した機能
どうせ作るならということで、使ってて「これ欲しかったな」と思ってたものも入れた。
| 機能 | できること |
|---|---|
| 操作の記録 | 実際にクリック・入力すると、そのまま行になる。待ち時間も実測で入る |
| ウィンドウ基準の座標 | ウィンドウを動かしても壊れない |
| 選んだ行だけ試す | 1行だけ実行して確かめられる |
| 一時停止 | 止めずに中断して、続きから再開できる |
| 最後の停止キー | Ctrl + Shift + Alt + F12。設定でつぶせない |
| どこにいても効くキー | ほかのアプリを触りながら実行・停止できる |
| 中クリック | macroni には無かったやつ |
「最後の停止キー」だけは、設定画面から消せないようにしてある。
マクロが暴走した時に止められないのが一番こわいからね。
ダウンロード(無料)
GitHub に置いてあるので、そのまま落として使ってもらって大丈夫だよ。
- MacroLab-1.0.0-standalone.zip(52MB)… そのまま動く。迷ったらこっち
- MacroLab-1.0.0-dotnet9.zip(0.4MB)… .NET 9 が入ってる人向け
動作環境は Windows 10 / 11(64bit)。
初回は「発行元不明」の警告が出ると思うので、そこは自己判断でお願いします。
「自分用に作り替えてほしい」もやってます
ここまで書いておいてなんだけど、このツールが誰にでも合うとは思ってない。
わたしが自分の困りごとに合わせて作ったものだからね。
「この機能だけ欲しい」「うちの業務だとこう動いてほしい」みたいなのがあれば、そういう形に作るのも仕事として受けてるよ。
相談だけでも大丈夫。「これって作れるの?」の段階で聞いてもらったほうが、たぶんお互い早いと思う。
まとめ
- マクロのクリック位置がズレるのは、座標の基準が食い違ってるのが原因(マルチモニタ限定)
- 待ち時間0が遅いのは、Windows が 15.6ms 刻みに丸めてるから
- どっちも直したものを GitHub で無料配布してるよ
- macroni の
.mcrnはそのまま開ける
同じところで詰まってた人の役に立ったら嬉しいな。
