- ベストアンサー
Delphiでキー入力を投げたい
- Delphiのプログラムでゲームコントローラに対応していないソフトウェアに入力を送信する方法を教えてください。
- Delphiのプログラムでコントローラからの入力を受け取り、該当するウインドウにメッセージを送信する方法を教えてください。
- Delphiでキー入力を送信する方法について教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
コードを試しました。WindowハンドルをAddObjectで記憶していますので下記は修正しました。 【修正前】PostMessage(hwnd(listbox1.Items[i]), WM_KEYDOWN, 入力キー名, 0); 【修正後】PostMessage(hwnd(listbox1.Items.Objects[i]), WM_KEYDOWN, {入力キー名} 48, 0); この修正を加えたら、秀丸エディタには文字0を入力できました。しかし、メモ帳やワードパッドには入力できませんでした。 ウィンドウとメッセージについて調べて試す必要があると思います。EnumWindowsはトップレベルのウィンドウしか探しません。目的のアプリケーションがトップレベルのウィンドウにWM_KEYDOWNを送って反応するものかどうか。子ウィンドウあるいは別のメッセージにしたらどうか、フォーカスをあてたらどうか、など。
その他の回答 (1)
- SHIMAPEE
- ベストアンサー率75% (154/203)
追加です。ウィンドウを前面にしてキー操作を一つ一つ送ってみてはどうでしょうか。メモ帳やワードパッドにも入力できました。 【変更前】 PostMessage(hwnd(listbox1.Items.Objects[i]), WM_KEYDOWN, {入力キー名} 48, 0); 【変更後】 var Key: Word; SetForegroundWindow(hwnd(listbox1.Items.Objects[i])); Key := VkKeyScan('0'); keybd_event(LoByte(Key), 0, 0, 0); // 文字0 keybd_event(LoByte(Key), 0, KEYEVENTF_KEYUP, 0); Key := VkKeyScan('a'); keybd_event(LoByte(Key), 0, 0, 0); // 文字a keybd_event(LoByte(Key), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, 0, 0); // shiftキー keybd_event(LoByte(Key), 0, 0, 0); // 文字A keybd_event(LoByte(Key), 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0);
お礼
遅くなってすみません。ご指摘の通りObjectsで取り出したら正常にキー入力を送ることができました(基本的なところでしたね)。 トップレベルで運良く反応してくれたため、これをベースに実装していきたいと思います。ありがとうございました!