トップページ > 過去ログ > 記事閲覧
非アクティブ時のキー入力
名前:T 日時: 2010/03/24 00:29

ネットを介してファイルを送受信するソフトを作ってみたのですが、 友人のPCでは非アクティブのときの入力をアクティブにしたとき拾ってしまうようなのです まるで先行入力のように拾ってしますのですが、 これは私のPCでは起きないのです どうすれば回避できますでしょうか WaitKey、CheckHitKeyの二つの関数で試してみましたが同じ結果に終わってしまいました 友人のPCはXPで、私のPCはVISTAです

Page: 1 |

Re: 非アクティブ時のキー入力 ( No.1 )
名前:Masao 日時:2010/03/25 03:55

入力にどの関数を使っているかなども重要な情報だと思いますよ。 (いくつか方法があるので) あと、ホスト側とそうでない側のプログラムに違いはありますか?
Re: 非アクティブ時のキー入力 ( No.2 )
名前:T 日時:2010/03/25 13:17

入力はキーボードからの入力のことなのですが、使用した関数は上記のとおりWaitKey、CheckHitKeyの二つの関数です SetAlwaysRunFlagをTRUEにして実行しているのですが、私のPCでは非アクティブ時の入力は拾わないのに対して友人のPCではアクティブ、非アクティブに関係なく拾ってしまいます 実際に動作を見てみたところ、アクティブにしたときに拾っているのではなくて、非アクティブのときも入力と同時にソフト側にも入力されているようでした SetAlwaysRunFlagをFALSEにすれば拾いませんでした ホストとサーバーは同一プログラムからの分岐です
Re: 非アクティブ時のキー入力 ( No.3 )
名前:Masao 日時:2010/03/25 13:46

たしかに、OSの違いが何か影響しているかもしれませんが、詳しいことは私は把握できていません。 ただ、私が思いつく方法をかいてみます。 チャット用ならば常に走らせる必要があるので、SetAlwaysRunFlag は TRUEで固定ですね。それでいて、あとは非アクティブ時に入力をとらなければOKなわけですから、まずは他の入力関数を試してみたらどうでしょうか? WaitKey と CheckHitKey よりも、MakeKeyInput と CheckKeyInput などを利用することをおすすめします。 (ちなみにこれらの関数は、特にチャットプログラムだとかを意識したような関数のようなので。)
Re: 非アクティブ時のキー入力 ( No.4 )
名前:T 日時:2010/03/25 16:45

アドバイスありがとうございます ですが私の思う用途とは少し離れているのでうまく使えそうにないです せっかくアドバイスしていただいたのに申し訳ありません 私は単に「〜ならS、〜ならD」などと表示して SとDのどちらが押されたかを判定したかっただけなのです とりあえずはファイル送受信中のみ SetAlwaysRunFlagをTRUEに、ほかの時にはFALSEにして 非アクティブ時の入力を受け取らないようにしようと思います 貴重なアドバイスをありがとうございました
Re: 非アクティブ時のキー入力 ( No.5 )
名前:管理人 日時:2010/03/29 06:41

GetWindowActiveFlag() で現在ウインドウがアクティブかどうかを取得することができますので、 GetWindowActiveFlag() の戻り値が TRUE ではないときはボタン判定をしない、といった処理で対応できると思います if( GetWindowActiveFlag() == TRUE ) { //アクティブ } else { //非アクティブ }
Re: 非アクティブ時のキー入力 ( No.6 )
名前:T 日時:2010/04/01 02:42

返事遅れてすみません GetWindowActiveFlag()を使って書き換えてみたらうまいこと動作してくれました アドバイスありがとうございました

Page: 1 |