🖱️

Pythonでトグル式左クリックマクロを作る(PyAutoGUIとkeyboard)

に公開

🖱️ はじめに

マインクラフトを友人と遊んでいると、トラップで敵を倒し続けるときや、
ブロックを掘り続ける単純作業などで「左クリックをずっと押しっぱなしにする」ことが多くなってきました。
ずっとマウスを押しているのはしんどいなぁ…と感じていたので、
トグル式でクリックをON/OFFできるマクロツールをPythonで作ってみました!


💡 作成背景

最初は左クリックだけですが、
右クリックや特定のキーに対応させたり、複数マクロを同時に動かしたり、
よりカスタム性を高められるようにアップデートする予定です😊


🐍 使用したライブラリ


🖥️ 環境構築手順

# Pythonのバージョン確認
python --version

# プロジェクトフォルダ作成
mkdir left_click_macro
cd left_click_macro

# 仮想環境作成
python -m venv venv

# 仮想環境有効化(Windowsの場合)
venv\Scripts\activate

# 必要なライブラリをインストール
pip install pyautogui keyboard

⚙️ マクロプログラム

以下のPythonコードで、ホットキー(例: F8) を押すたびに
左クリックの押しっぱなしON/OFFを切り替えられます。

left_click_macro.py
import pyautogui
import keyboard
import threading
import json
import os
import tkinter as tk
from tkinter import messagebox

# 設定ファイル名
CONFIG_FILE = 'config.json'

# デフォルト設定
config = {
    'hotkey': 'f8'
}

# 設定ファイルを読み込む
def load_config():
    global config
    if os.path.exists(CONFIG_FILE):
        with open(CONFIG_FILE, 'r') as f:
            config = json.load(f)
    else:
        save_config()

# 設定ファイルを保存する
def save_config():
    with open(CONFIG_FILE, 'w') as f:
        json.dump(config, f)

# 左クリックの状態
clicking = False

# クリックの実行ループ
def click_loop():
    global clicking
    was_clicking = False
    while True:
        if clicking and not was_clicking:
            pyautogui.mouseDown(button='left')
            was_clicking = True
        elif not clicking and was_clicking:
            pyautogui.mouseUp(button='left')
            was_clicking = False
        pyautogui.time.sleep(0.01)

# ホットキー切り替え
def toggle_clicking():
    global clicking
    clicking = not clicking
    status_label.config(text=f"状態: {'ON' if clicking else 'OFF'}")

# 設定のホットキーに基づいて登録
def register_hotkey():
    keyboard.clear_all_hotkeys()
    keyboard.add_hotkey(config['hotkey'], toggle_clicking)

# ホットキー設定変更
def change_hotkey():
    new_hotkey = hotkey_entry.get()
    if new_hotkey:
        config['hotkey'] = new_hotkey
        save_config()
        register_hotkey()
        messagebox.showinfo("設定", f"新しいホットキー: {new_hotkey}")

# GUI
root = tk.Tk()
root.title("左クリックマクロ")
root.geometry("300x150")

status_label = tk.Label(root, text="状態: OFF", font=("Helvetica", 16))
status_label.pack(pady=10)

hotkey_entry = tk.Entry(root)
hotkey_entry.insert(0, config['hotkey'])
hotkey_entry.pack(pady=5)

change_button = tk.Button(root, text="ホットキー変更", command=change_hotkey)
change_button.pack(pady=5)

# スレッド開始
load_config()
register_hotkey()
threading.Thread(target=click_loop, daemon=True).start()

root.mainloop()

📝 ポイントまとめ

  • ✅ 左クリックは「トグル式」なので、一度ホットキーを押すと押しっぱなし状態になります。
  • ✅ OFFに戻すと、自動で mouseUp が送られ、手動クリック操作も正常に使えます。

💡 これからの拡張予定

  • 右クリック対応
  • キー押しっぱなしなどの応用
  • 複数マクロの同時動作
  • UIからの設定項目拡充

などなど、便利にしていく予定です!
現状では別々の実行ファイルでそれぞれのマクロを作成していますが、ある程度のマクロを作れたら一つのファイルにモジュール化、統合して一つのマクロ実行ファイルにまとめたいと思っています。

そんな今後の展望でした。

今回はこれでおしまいです。最後まで読んでいただきありがとうございました。

Discussion