【Python】PyAutoGUIでキーボード入力を自動化する:文字列・ショートカット・長押し

目次

概要

PyAutoGUIを使用してキーボード操作を自動化する方法を解説します。

単純なテキスト入力(write)だけでなく、修飾キーの長押し(keyDown/keyUp)による範囲選択や、コピー&ペーストなどのショートカットキー入力(hotkey)をプログラムで制御する手法を網羅します。

仕様(入出力)

  • 入力:
    • 入力したい文字列
    • 操作したいキー(Enter, Shift, Ctrlなど)
    • キー入力の間隔(インターバル)
  • 出力:
    • キーボードデバイスによる入力信号
  • 前提:
    • pyautogui ライブラリのインストールが必要です。
    • 日本語入力を行う場合は、クリップボード経由(pyperclip等)の工夫が必要です(本機能は英数字キーのみ対応)。

基本の使い方

文字列を順番に入力し、最後にEnterキーを押す基本的な実装です。

※古い typewrite 関数は現在 write のエイリアスとなっているため、モダンな write を使用します。

import pyautogui

# 安全装置の設定
pyautogui.FAILSAFE = True

# 1文字ずつ0.1秒間隔で入力
# "enter" のような特殊キーもリストで指定可能
pyautogui.write(['H', 'e', 'l', 'l', 'o', 'enter'], interval=0.1)

コード全文

テキストエディタ上で「文字入力」「範囲選択(長押し)」「コピー(ショートカット)」を行う一連の操作をシミュレーションするコードです。

import pyautogui
import time

def automate_text_editing():
    """
    キーボード操作を組み合わせてテキスト編集を自動化するデモです。
    メモ帳などのテキストエディタを開いてから実行してください。
    """
    pyautogui.FAILSAFE = True

    print("3秒後に操作を開始します。エディタをアクティブにしてください...")
    time.sleep(3)

    try:
        # 1. 文字列の入力 (write)
        # intervalを設定することで、人間がタイプしているような挙動になります
        print("テキストを入力中...")
        pyautogui.write("Python Automation", interval=0.1)
        pyautogui.press("enter")
        
        # 2. 特殊キーの長押しによる操作 (keyDown / keyUp)
        # Shiftを押しながら左矢印を3回押し、文字を選択する動作
        print("Shift + 矢印キーで範囲選択中...")
        pyautogui.keyDown("shift")
        
        # pressで単発のキー入力を実行
        for _ in range(3):
            pyautogui.press("left")
            time.sleep(0.1)
            
        pyautogui.keyUp("shift") # 必ずキーを離すこと
        
        # 3. ショートカットキーの同時押し (hotkey)
        # 選択範囲をコピー (Ctrl + C)
        print("ショートカットキー(Ctrl+C)を実行...")
        pyautogui.hotkey("ctrl", "c")
        
        print("操作完了")

    except pyautogui.FailSafeException:
        print("フェイルセーフにより停止しました。")
    except Exception as e:
        print(f"エラーが発生しました: {e}")

if __name__ == "__main__":
    automate_text_editing()

カスタムポイント

パラメータ設定

入力関数(write 等)で使用できる主要なパラメータです。

パラメータ名デフォルト意味・役割
messagestr / list必須入力する文字列、またはキー名のリスト。
intervalfloat0.0各文字(または各キー)を入力する間の待機時間(秒)。0.0だと即時入力。

操作関数の使い分け

  • pyautogui.write(message, interval)
    • 通常の文字入力に使用します。
  • pyautogui.press(keys)
    • enter, esc, f1 などの特殊キーを単発で押す場合に使用します。
  • pyautogui.keyDown(key) / pyautogui.keyUp(key)
    • ドラッグ操作や修飾キー(Shift, Ctrl, Alt)を押しっぱなしにする場合に使用します。
    • 注意: keyDown したら必ず keyUp する処理を入れてください。プログラムが止まっても押しっぱなしの状態が残ることがあります。
  • pyautogui.hotkey(key1, key2, ...)
    • ctrl + calt + f4 などの同時押しを1行で記述できる便利な関数です。内部で自動的にDown/Up処理が行われます。

注意点

  1. 日本語入力の制限
    • PyAutoGUIのキーボード入力は、直接日本語(全角文字)を入力することができません。
    • 日本語を入力したい場合は、「pyperclip でクリップボードに日本語をコピー」→「pyautogui.hotkey('ctrl', 'v') で貼り付け」という手順をとるのが一般的です。
  2. キーボードレイアウト
    • US配列とJIS配列の違いにより、記号(@, :, _ など)が意図通りに入力されない場合があります。
    • 記号入力がずれる場合は、直接文字を入力するのではなく、アスキーコードやキー名を指定する調整が必要です。
  3. フォーカスの確認
    • プログラム実行時に、入力対象のウィンドウ(メモ帳やブラウザの入力欄)がアクティブ(最前面)になっている必要があります。

応用

コンテキストマネージャ(with 構文)を使ったような安全なキー操作の実装例です。

try…finally ブロックを使うことで、エラー発生時でも確実にキーを離す(Releaseする)ように設計します。

import pyautogui
import time

def safe_copy_paste():
    """
    エラーが起きても確実にCtrlキーを離す安全な実装例
    """
    pyautogui.FAILSAFE = True
    time.sleep(2)
    
    print("全選択してコピーします")
    
    try:
        # 修飾キーを押す
        pyautogui.keyDown('ctrl')
        
        # 操作を実行
        pyautogui.press('a') # 全選択
        time.sleep(0.1)
        pyautogui.press('c') # コピー
        
    except Exception as e:
        print(f"操作中にエラー: {e}")
        
    finally:
        # 成功・失敗に関わらず必ずキーを離す
        pyautogui.keyUp('ctrl')
        print("Ctrlキーをリリースしました")

if __name__ == "__main__":
    safe_copy_paste()

まとめ

PyAutoGUIのキーボード操作は、write による文字入力と hotkey によるショートカット操作が基本となります。

修飾キーの長押し操作(keyDown)を行う際は、押しっぱなし事故を防ぐために、必ず keyUp が実行されるようにコードを構成してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次