Windows 11 向けマクロレコーダー / プレイヤー。 マウス・キーボード操作を記録してファイルに保存し、テキスト形式のマクロスクリプトとして編集・再生できます。
- 起動方法
- 画面構成
- 基本操作
- マクロファイルの書き方
- エラーハンドリング (TRY/CATCH)
- ファイル分割と呼び出し (CALL)
- シンタックスシュガー (コマンドエイリアス)
- グローバルホットキー
- 設定項目
- フォルダ構成
python main.py
または配布された macro_player.exe をダブルクリックしてください。
┌──────────────────────────────────────────────────────────────┐
│ メニューバー ファイル / マクロ / ツール / ヘルプ │
├──────────────┬───────────────────────────────────────────────┤
│ │ タブエディタ │
│ サイドバー │ (マクロスクリプトを編集) │
│ ───────── │ │
│ [⏺記録] │ │
│ [⏹停止] │ │
│ [▶再生] │ │
│ [✕クリア] │ │
│ [💾保存] │ │
│ [📂読込] │ │
│ ───────── │ │
│ ファイルツリー│ │
│ macros/ │ │
│ foo.macro │ │
│ bar.macro │ │
├──────────────┴───────────────────────────────────────────────┤
│ ログパネル [INFO] [SUCCESS] [WARNING] [ERROR] │
├──────────────────────────────────────────────────────────────┤
│ ステータスバー 状態表示 カーソル位置 / 進捗 │
└──────────────────────────────────────────────────────────────┘
右側に 変数ウォッチパネル(ドック)が表示されます。再生開始時に自動表示され、$var の値をリアルタイムで確認できます。
- エディタで新しいタブ(または既存ファイル)を開く
- サイドバーの [⏺記録] ボタン、またはホットキー
Ctrl+Shift+Rを押す - 記録したいマウス・キーボード操作を実行する
- [⏹停止] ボタン、またはホットキー
Ctrl+Shift+Xを押して停止 - 記録されたコマンドがエディタに追記されます
ホットキーはアプリがバックグラウンドでも動作します(グローバルホットキー)。
- エディタに再生したいマクロを開く(またはそのまま記録内容を使う)
- サイドバーの [▶再生] ボタン、またはホットキー
Ctrl+Shift+Pを押す - 現在再生中の行がエディタ上でハイライト表示されます
- 再生中に [⏹停止] ボタンで中断できます
| 操作 | 方法 |
|---|---|
| 新規タブ | Ctrl+N / サイドバー [📂読込] |
| ファイルを開く | Ctrl+O / サイドバー [📂読込] / ファイルツリーをダブルクリック |
| 上書き保存 | Ctrl+S / サイドバー [💾保存] |
| 名前を付けて保存 | Ctrl+Shift+S |
マクロファイル(.macro)は 1 行 1 コマンドのテキストファイルです。
コマンド名は大文字・小文字を区別しません。引数はスペース区切り、空白を含む文字列は "ダブルクォート" で囲みます。
# から行末までがコメントになります。
# これはコメントです
WAIT 500 # 行末コメントも有効
MOUSE_POS x y
マウスカーソルを画面座標 (x, y) に移動します。
MOUSE_GET_POS $x $y
現在のマウスカーソル座標を変数 $x、$y に取得します。
MOUSE_LEFT_CLICK [x y]
MOUSE_RIGHT_CLICK [x y]
MOUSE_MIDDLE_CLICK [x y]
x y を指定した場合はその座標に移動してからクリックします。省略時は現在位置でクリックします。
MOUSE_LEFT_DOWN [x y]
MOUSE_LEFT_UP [x y]
MOUSE_RIGHT_DOWN [x y]
MOUSE_RIGHT_UP [x y]
MOUSE_MIDDLE_DOWN [x y]
MOUSE_MIDDLE_UP [x y]
WHEEL delta
WHEEL x y delta
delta に正の値で上スクロール、負の値で下スクロールします。
KEY キー名
指定したキーを押して離します。
KEY_DOWN キー名
KEY_UP キー名
KEYS ctrl+c
KEYS ctrl+shift+s
KEYS alt+F4
KEYS_DOWN ctrl+shift
KEYS_UP ctrl+shift
TYPE "Hello, World!"
TYPE 入力したいテキスト
| キー名 | 説明 |
|---|---|
ctrl ctrl_l ctrl_r |
Ctrl キー |
shift shift_l shift_r |
Shift キー |
alt alt_l alt_r |
Alt キー |
win / super |
Windows キー |
enter / return |
Enter |
space |
スペース |
backspace |
BackSpace |
tab |
Tab |
esc / escape |
Escape |
delete / del |
Delete |
home end |
Home / End |
pageup pagedown |
Page Up / Down |
up down left right |
矢印キー |
insert |
Insert |
capslock |
CapsLock |
f1 ~ f12 |
ファンクションキー |
a ~ z 0 ~ 9 |
文字・数字キー |
WAIT ミリ秒
WAIT 1000 # 1 秒待機
WAIT 500 # 0.5 秒待機
WAIT $delay # 変数で指定
IF 条件
# 条件が真のとき実行
ELSEIF 別の条件
# 別条件が真のとき実行
ELSE
# すべて偽のとき実行
ENDIF
条件の書き方:
IF TRUE
IF FALSE
IF $count > 5
IF $count == 0
IF $flag AND $x > 100
IF NOT $done
IF WINDOW_EXISTS "Notepad"
IF IMAGE_MATCH "button.png" threshold 0.9
IF PIXEL_COLOR 500 300 255 0 0 10
IF FILE_EXISTS "C:\data\log.txt"
LOOP 10
MOUSE_LEFT_CLICK 100 200
WAIT 100
ENDLOOP
LOOP $count # 変数で回数指定
WAIT 50
ENDLOOP
WHILE $i < 10
$i = $i + 1
WAIT 100
ENDWHILE
WHILE WINDOW_EXISTS "Notepad"
WAIT 500
ENDWHILE
REPEAT
MOUSE_LEFT_CLICK 100 200
WAIT 200
UNTIL IMAGE_MATCH "ok_button.png"
ループの中でのみ使用できます。
LOOP 100
IF $done
BREAK # ループを抜ける
ENDIF
IF $skip
CONTINUE # 次のイテレーションへ
ENDIF
WAIT 10
ENDLOOP
RETURN # 現在のマクロファイルから呼び出し元へ戻る (CALL 先で使用)
EXIT # マクロ全体を終了する
変数名は $ で始まります。英数字とアンダースコアが使えます(例: $count、$my_value)。
$count = 0
$name = "hello"
$x = $y + 10
$total = $a * $b - 1
代入の右辺、および条件式では Python の演算子が使えます。
| 演算子 | 例 |
|---|---|
| 加減乗除 | $a + $b / $a - 1 / $x * 2 / $n / 4 |
| 余り | $n % 3 |
| 比較 | $x == 5 / $x != 0 / $x >= 10 |
| 論理 | $a > 0 AND $b < 10 / NOT $flag / $x OR $y |
$t = GET_TIME # Unix タイムスタンプ (float)
$r = RANDOM 1 100 # 1 〜 100 のランダム整数
$clip = CLIPBOARD_GET # クリップボードの文字列
$color = GET_PIXEL_COLOR 500 300 # "R G B" 文字列
$found = IMAGE_MATCH "logo.png" threshold 0.85
$win = WINDOW_EXISTS "Notepad"
$exists = FILE_EXISTS "C:\data.txt"
| 関数 | 書き方 | 戻り値 |
|---|---|---|
GET_TIME |
$t = GET_TIME |
Unix タイムスタンプ (float) |
RANDOM |
$r = RANDOM 最小 最大 |
指定範囲の整数 |
CLIPBOARD_GET |
$s = CLIPBOARD_GET |
クリップボードの文字列 |
GET_PIXEL_COLOR |
$c = GET_PIXEL_COLOR x y |
"R G B" 形式の文字列 |
IMAGE_MATCH |
$b = IMAGE_MATCH ファイル名 [threshold 値] [region x y w h] |
True / False |
PIXEL_COLOR |
$b = PIXEL_COLOR x y R G B [tolerance] |
True / False |
WINDOW_EXISTS |
$b = WINDOW_EXISTS "タイトル" |
True / False |
FILE_EXISTS |
$b = FILE_EXISTS "パス" |
True / False |
IMAGE_MATCHには OpenCV と mss が必要です。WINDOW_EXISTSには pywin32 が必要です。
PRINT "メッセージ"
PRINT $count
ログパネルに出力します。
CLIPBOARD_SET "コピーするテキスト"
CLIPBOARD_SET $var
SCREENSHOT # screenshots/YYYYMMDD_HHMMSS.png に保存
SCREENSHOT "C:\images\snap.png" # パス指定
WINDOW_FOCUS "Notepad" # ウィンドウをフォアグラウンドにする
WINDOW_MOVE "Notepad" 100 100 # ウィンドウを移動
WINDOW_RESIZE "Notepad" 800 600 # ウィンドウをリサイズ
WINDOW_CLOSE "Notepad" # ウィンドウを閉じる (WM_CLOSE 送信)
コマンド実行中にエラーが発生した場合、CATCH ブロックで処理を継続できます。
TRY
WINDOW_FOCUS "存在しないウィンドウ"
TYPE "Hello"
CATCH
PRINT "ウィンドウが見つかりませんでした"
ENDTRY
CATCH ブロックを省略した場合、エラーはログパネルに出力されて次の行に進みます。
TRY
SCREENSHOT "output.png"
ENDTRY
長いマクロは複数ファイルに分割して管理できます。
# メインマクロ (main.macro)
CALL "login.macro"
CALL "process.macro"
CALL "logout.macro"
- 呼び出し先のファイルは
macros/フォルダからの相対パスで指定します - 変数スコープは呼び出し元と共有されます
- 呼び出し先で
RETURNを実行すると呼び出し元に戻ります - 最大再帰深度は 16 です
settings.ini の [COMMANDS] セクションにエイリアスを定義できます。
[COMMANDS]
POS = MOUSE_POS
MOUSE_MOVE = MOUSE_POS
LEFT_BUTTON = MOUSE_LEFT_CLICK
RIGHT_BUTTON = MOUSE_RIGHT_CLICK定義したエイリアスはコマンドとして使用でき、構文ハイライトも適用されます。
POS 500 300 # MOUSE_POS 500 300 と同じ
LEFT_BUTTON 500 300 # MOUSE_LEFT_CLICK 500 300 と同じ
アプリケーションがバックグラウンドにある状態でも以下のホットキーが機能します。
| 操作 | デフォルト |
|---|---|
| 記録開始 | Ctrl+Shift+R |
| 記録停止 | Ctrl+Shift+X |
| 再生 | Ctrl+Shift+P |
ホットキーは ツール → 設定 → ホットキー タブで変更できます。変更後は設定ダイアログの OK ボタンを押すと即座に反映されます。
ツール → 設定 から変更できます。settings.ini を直接編集することもできます。
| 項目 | デフォルト | 説明 |
|---|---|---|
| マウスクリック待機時間 | 50 ms | クリック押下と解放の間の待機時間 |
| キー押下待機時間 | 30 ms | キー押下と解放の間の待機時間 |
| 再生速度 | 1.0 | 1.0 が等倍速。2.0 で 2 倍速、0.5 で半速 |
グローバルホットキーのキー組み合わせを変更できます。
LOOP 10
MOUSE_LEFT_CLICK 500 400
WAIT 100
ENDLOOP
KEYS ctrl+a
KEYS ctrl+c
$text = CLIPBOARD_GET
PRINT $text
CLIPBOARD_SET "prefix_" + $text
KEYS ctrl+v
$found = FALSE
REPEAT
$found = IMAGE_MATCH "ok_button.png" threshold 0.85
WAIT 500
UNTIL $found
MOUSE_LEFT_CLICK 500 400
WHILE WINDOW_EXISTS "ダウンロード中"
WAIT 1000
ENDWHILE
PRINT "ダウンロード完了"
$i = 1
WHILE $i <= 5
PRINT $i
$i = $i + 1
WAIT 200
ENDWHILE
# 現在のマウス位置を保存
MOUSE_GET_POS $saved_x $saved_y
# 別の操作
MOUSE_LEFT_CLICK 100 200
TYPE "Hello"
# 元の位置に戻る
MOUSE_POS $saved_x $saved_y
TRY
WINDOW_FOCUS "MyApp"
WAIT 500
TYPE "Hello"
CATCH
PRINT "MyApp が見つかりません。起動します..."
# アプリを起動する処理など
ENDTRY
macro_player/
├── macro_player.exe (または main.py)
├── settings.ini 設定ファイル
├── macros/ マクロファイルの保存先
│ └── *.macro
├── templates/ IMAGE_MATCH 用テンプレート画像
│ └── *.png
└── screenshots/ SCREENSHOT コマンドの保存先 (自動作成)
| 項目 | 要件 |
|---|---|
| OS | Windows 10 / 11 (64bit) |
| Python | 3.11 以上 (ソースから実行する場合) |
| 主要ライブラリ | PySide6, pynput, mss, opencv-python, pywin32, pyperclip |