|
■No67560 (もふもっふ さん) に返信 > SendInputをいろいろ調べてやってみたのですが > これはアクティブでないアプリに対してはできないのでしょうk? SendInput は、マウス入力やキーボード入力をエミュレートするものです。
自アプリが非アクティブな時に、ユーザーがキーボード操作をしても 反応しないでしょうから、アクティブにしておく必要があるでしょうね。
キーエミュレートは大抵のアプリケーションに対して使える反面、相手が アクティブでないと意味を持たないため、確実性に欠けます。SendKeys も同様ですね。
> アクティブでないアプリに対してはPostMessageを使用するのでしょうか?
PostMessage 等で処理できる場合もあるかもしれませんが、 制御方法に関しては、相手のアプリ次第だと思いますよ。 (今回通信したい相手は、Enter キーの受信をどのようにして検知しているのでしょうか?)
たとえば相手が TextBox なら、WM_SETTEXT を送って文字列を渡すことができますが、この方法は IE 等で開いた HTML 上の TEXTAREA に対しては使えません(MSHTML 経由で送り込むことはできます)。
あるいは、ダイアログ上のボタンを押したいのなら、それがデフォルトボタンなら、 Enter キーを送出するという手もありますし、既定のボタンでは無いなら、 ボタンをアクティブにしてから Space を送出すると言う手があります。 相手をアクティブにせずボタンを押したことにしたいのなら、 PostMessage(hdlg, WM_COMMAND, MAKEWPARAM(id, BN_CLICKED), hbtn) とか PostMessage(hbtn, BM_CLICK, 0, 0) とか PostMessage(hbtn, WM_LBUTTONDOWN, MK_LBUTTON, 0) PostMessage(hbtn, WM_LBUTTONUP, 0, 0) などの方法も使えるかも。IAccessible.doDefaultAction メソッドで処理する手もありますね。
|