> 何時も、お世話に成っています。
>
> 目的ウィンドウに送信後、フォーカスを変更したいのですが、
> SendInputの後にSetFocus等で変更したウィンドウに送信されるのですが、
> 度の様にすれば良いのでしょうか?
>
> 下記の場合、EditBox2に送信される。
> SetFocus(EditBox1)
> SendInput()
> SetFocus(EditBox2)
SendInput()の後にSleep()を50~100ミリ秒くらい入れてみてはどうでしょうか?
EditBoxに文字を打ち込むだけならSetWindowTextでもよさそうですが。。。
> p.s.
>
keybd_event 関数
> 「Windows NT/2000/XP: この関数は SendInput 関数に取って代わられました。」
> となっていますが、不具合が生じるのでしょうか?
keybd_event()とSendInput()との大きな違いはkeybd_event()がキーイベントを1つ1つ個別に送信するのに対し、
SendInput()はキーやマウスのイベントをブロック単位で送信するというものです。
keybd_event()はキーイベントの送信中に、人間がキーを操作してしまうとそのキーイベントが紛れ込んでしまいます。
(もちろんkeybd_event()を使用する別のアプリケーションからも影響を受けます。)
一方のSendInputを使用すると、キーイベントをブロック単位で発生させますので、割り込みの影響を受けにくいです。
どちらを使うかは自由ですが、keybd_event()はMicrosoftは推奨していません。
今後サポートを打ち切られる可能性もあります。
(サポートしないといいながら16bit時代のガラクタがWindowsXPには大量に搭載されてます。Vistaで大分整理されたみたいだが...)
一応、ActiveBasicでは環境依存(9X系のWindowsは98以降にSendInputは実装されている)の強いAPIは搭載しない方針できていたので
SendInput関数は標準には入りにくかったとは思うんですが、
おそらく、SendInput関数のINPUT構造体は
共用体を含むので入ってないのではないかと思います。
P.S.
さすがに今、10年前のOSである95は考えなくてもいいと思うので、
今後はSendInput関数を使う方向でいいんじゃないですかね。