• ベストアンサー

VB6でSendKeyを利用したTab移動でキーボードが効かなくなる!

今、複数のテキストボックス間の移動を エンターキーを押した時に移動したいです。 そのときSendKeyでTabを渡してやって移動しているのですが、 ある特定のマシンでエンターをすばやく連打していると キーボードが効かなくなります。 その効かなくなるマシンのスペックや状態を書きたいのですが 法則性がつかめません。 どなたか心当たりのある方、教えてください。

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

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 SendKeysを使用した時のキーボード障害は有名のようです。 MicrosoftのHPに以下の関連記事がありました。 http://support.microsoft.com/default.aspx?scid=kb;ja;JP179987 SendKeysを使用しない方法にしてはどうでしょうか。 例えば、テキストボックスのKeyDownイベントでKeyCodeを判定するとか。 あと、自作のSendKey関数のページを紹介しておきます。 http://shota.s-lines.net/terapad/tpml-log/500/msg00163.html

参考URL:
http://support.microsoft.com/default.aspx?scid=kb;ja;JP179987,http://shota.s-lines.net/terapad/tpml-log/500/msg00163.htm

その他の回答 (1)

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.2

sendkeysは、VBからOSにキーを打たせる処理を流しますが、内部処理は割り込み処理のように扱われます。 もちろんOSやメモリの状況によって、他のソフトやキー操作などによる割り込みに左右されます。 VBのDoEventsという命令があります。sendkeysは常にDoEventsを行うイメージですので、他の処理の割り込みを許してしまいます。 フォーカス移動のためのTAB移動をしたいのであれば、全てのコントロールのTABストップを不許可にして、maruru01氏の言われているように、イベントでフォーカス移動位置を指定した方がよいと思います。 もしオプションボタン・ラジオボタン・コマンドボタンなどが含まれているのであれば、フックしないと思うような処理にならないかもしれませんが・・・ 少なくとも環境に影響される現状よりはマシになると思われます。

関連するQ&A