• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Delphiでキー入力を投げたい)

Delphiでキー入力を投げたい

このQ&Aのポイント
  • Delphiのプログラムでゲームコントローラに対応していないソフトウェアに入力を送信する方法を教えてください。
  • Delphiのプログラムでコントローラからの入力を受け取り、該当するウインドウにメッセージを送信する方法を教えてください。
  • Delphiでキー入力を送信する方法について教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • SHIMAPEE
  • ベストアンサー率75% (154/203)
回答No.1

コードを試しました。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)
回答No.2

追加です。ウィンドウを前面にしてキー操作を一つ一つ送ってみてはどうでしょうか。メモ帳やワードパッドにも入力できました。 【変更前】 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);

pythian
質問者

お礼

遅くなってすみません。ご指摘の通りObjectsで取り出したら正常にキー入力を送ることができました(基本的なところでしたね)。 トップレベルで運良く反応してくれたため、これをベースに実装していきたいと思います。ありがとうございました!

関連するQ&A

専門家に質問してみよう