WindowsでバッチファイルやPowerShellスクリプトを作成していると、コマンドでキーボード操作を行いたいときがあります。そのようなときは、SendKeysが便利です。
そこでここでは、PowerShellでSendKeysを使ってキー入力などのキーボード操作を行う方法を解説します。
目次
SendKeysの基本的な使い方
Windowsでコマンドでキーボード操作を行いたいときは、PowerShellでキーボード操作をアクティブなウィンドウに送信できるSendKeysクラスを使うのが一般的です。
SendKeysクラスを使うときは、まず、以下のコマンドを実行して.NETライブラリを読み込みます。
PS> Add-Type -AssemblyName System.Windows.Forms
ライブラリを読み込んだら、コマンド操作でアクティブウィンドウにさまざまなキー操作を送信できます。
たとえば、メモ帳を起動して「こんにちは」とキー入力させたいときは、以下のようにコマンドを実行します。
PS> Start-Process notepad; Start-Sleep -m 1000; [System.Windows.Forms.SendKeys]::SendWait("こ"); [System.Windows.Forms.SendKeys]::SendWait("ん"); [System.Windows.Forms.SendKeys]::SendWait("に"); [System.Windows.Forms.SendKeys]::SendWait("ち"); [System.Windows.Forms.SendKeys]::SendWait("は")
特殊キーの入力方法
SendKeysでは、文字以外にもCtrlキーやAltキー、Tabキー、Enterキーといった特殊キーも送信できます。主な特殊キーのコードは次のとおりです。
Tabキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{TAB}")
Enterキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{ENTER}")
Delキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{DEL}")
BackSpaceキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{BS}")
CapsLockキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{CAPSLOCK}")
Escキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{ESC}")
Homeキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{HOME}")
NumLockキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{NUMLOCK}")
PageUpキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{PGUP}")
PageDownキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{PGDN}")
PrintScreenキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{PRTSC}")
ファンクションキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{F1}")
上矢印キー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{UP}")
下矢印キー:
PS> [System.Windows.Forms.SendKeys]::SendWait("{DOWN}")
Ctrlキー+hキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("^h")
Shiftキー+hキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("+h")
Altキー+hキー:
PS> [System.Windows.Forms.SendKeys]::SendWait("%h")
参考:SendKeys Class (System.Windows.Forms) | Microsoft Learn
キーの繰り返し
キーの繰り返しを指定するには、キーと回数を指定します。たとえば、Hキーを10回押したいときは、以下のようにコマンドを実行します。
PS> [System.Windows.Forms.SendKeys]::SendWait("{H 10}")