ゲーム画面の操作について質問1(URL)させていただき、どうやら「directx」で作られたゲームは仮想キーを受け付けない仕様ではないかと教えていただきました。
そこで「ハードウェアキー入力」と「プログラム操作仮想キー入力」との違いを確かめるべく質問2(URL)させていただきました。ここでハードウェアキー入力の検知を教えていただいたのですが、ゲーム画面が非アクティブの時は正常に動作していたのですが、アクティブの時動作していませんでした。
C:\Python\Python38\Lib\site-packages\keyboard_winkeyboard.py
python
1 def process_key(event_type, vk, scan_code, is_extended): 2 global shift_is_pressed, altgr_is_pressed, ignore_next_right_alt 3 print(event_type, vk, scan_code, is_extended) # --------確認のため表示-------- 4 5 # Pressing alt-gr also generates an extra "right alt" event 6 if vk == 0xA5 and ignore_next_right_alt: 7 ignore_next_right_alt = False 8 return True 9 10 modifiers = ( 11 ('shift',) * shift_is_pressed + 12 ('alt gr',) * altgr_is_pressed + 13 ('num lock',) * (user32.GetKeyState(0x90) & 1) + 14 ('caps lock',) * (user32.GetKeyState(0x14) & 1) + 15 ('scroll lock',) * (user32.GetKeyState(0x91) & 1) 16 ) 17 entry = (scan_code, vk, is_extended, modifiers) 18 if entry not in to_name: 19 to_name[entry] = list(get_event_names(*entry)) 20 21 names = to_name[entry] 22 name = names[0] if names else None 23 24 # TODO: inaccurate when holding multiple different shifts. 25 if vk in shift_vks: 26 shift_is_pressed = event_type == KEY_DOWN 27 if scan_code == 541 and vk == 162: 28 ignore_next_right_alt = True 29 altgr_is_pressed = event_type == KEY_DOWN 30 31 is_keypad = (scan_code, vk, is_extended) in keypad_keys 32 return callback(KeyboardEvent(event_type=event_type, scan_code=scan_code or -vk, name=name, is_keypad=is_keypad))
アクティブの時は
print(event_type, vk, scan_code, is_extended) # --------確認のため表示--------
これが表示されなかったのでそのように判断しました。
ゲーム画面がアクティブの時keyboard.wait()でキーが取得できない原因は何でしょうか?
追記(ゲームアクティブ時の検証プログラムの挙動)
・アクティブ時 a を押下しても進まず count は加算されない
・非アクティブ時 a を押下すると進み count が加算される
python
1import keyboard 2count = 0 3while True: 4 # aが押されるまで待つ。 5 keyboard.wait("a") 6 count += 1 7 print("ハードウェアキーボードの'a'が押下されました。", count)
・アクティブ時 count は加算されていく
・非アクティブ時 同じくcount は加算されていく
python
1import keyboard 2count = 0 3while True: 4 count += 1 5 print("ハードウェアキーボードの'a'が押下されました。", count)
アクティブ時keyboard.wait("a")が動作していないことが分かる
回答1件
あなたの回答
tips
プレビュー