下記は
Windows10 Professional 20H2
python 3.8.6
Visual Studio Codeで実行しています。
ハードウェアに関係することであるため、質問者さんの環境によってうまく動かない場合や異なる結果となる場合があります。
再現手順
まず、pip install keyboardによって、keyboardパッケージをインストールします。
Windowsのメモ帳(notepad.exe)を開き、
別々のターミナル(またはコマンドプロンプト等)で、下記sendkey.pyとdetect.pyを、
それぞれ実行します。
※止めるには、それぞれのターミナルでエスケープキーを押しっぱなしにしてください。
sendkey.py
python
1import pyautogui
2import keyboard
3import time
4from win32gui import GetWindowText, GetForegroundWindow
5
6while True:
7 if keyboard.is_pressed("esc"):
8 break
9 if GetWindowText(GetForegroundWindow()) == "無題 - メモ帳":
10 pyautogui.press("a")
11 print("pyautoguiがキーボードの'a'を送出しました。")
12 time.sleep(3)
detect.py
import keyboard
while True:
if keyboard.is_pressed("esc"):
break
# aが押されるまで待つ。
keyboard.wait("a")
print("ハードウェアキーボードの'a'が押下されました。")
検証結果
sendkey.pyは、pyautogui経由で、3秒ごとに「a」のキーを送っています。
一方、detect.pyでは、キーボードを操作しない場合、何も表示されませんが、キーボードの「a」を押すと、「ハードウェアキーボードの'a'が押下されました。」と表示されます。
結果からの推察
keyboard
パッケージのis_pressed()
関数によって、
pyautogui.press()
でのコード入力を無視し、
キーボード直接手入力のみを検知することができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/10 05:44