No.16501![]() |
キーボードバッファの状態取得 投稿者---masay(2004/09/02 17:41:37) |
||
こんにちは。 題名のとおりで、キーボードバッファの状態(文字があるか、無いか) を取得する方法を教えてください。 途中で処理が中断することなく、バッファの状態を知りたいのです。 よろしくお願いします。 |
No.16502![]() |
Re:キーボードバッファの状態取得 投稿者---YuO(2004/09/02 18:15:09) |
||
>題名のとおりで、キーボードバッファの状態(文字があるか、無いか) >を取得する方法を教えてください。 環境に依存しますので,環境の情報を提示してください。 |
No.16510![]() |
Re:キーボードバッファの状態取得 投稿者---masay(2004/09/03 08:36:22) |
||
>環境に依存しますので,環境の情報を提示してください。 そうなのですか。知りませんでした。 環境は、 WIN2000Pro VC++6.0 C言語環境(C++ではありません) です。 環境って、こういうことであってますか?? よろしくお願いいたします。 |
No.16515![]() |
Re:キーボードバッファの状態取得 投稿者---おでん(2004/09/03 09:42:27) |
||
>環境は、 >WIN2000Pro >VC++6.0 >C言語環境(C++ではありません) >です。 WindowsAPIのGetAsyncKeyStateあたりを調べると、幸せになれると思います。 |
No.16519![]() |
Re:キーボードバッファの状態取得 投稿者---masay(2004/09/03 10:39:27) |
||
>WindowsAPIのGetAsyncKeyStateあたりを調べると、幸せになれると思います。 ありがとうございます。 調べてみます。 |
No.16540![]() |
ご教授お願いいたします。 投稿者---masay(2004/09/03 15:34:12) |
||
>WindowsAPIのGetAsyncKeyStateあたりを調べると、幸せになれると思います。 調べてみたのですが、わかりませんでした。 どのキーが押されているか?ではなくて、 あくまで、キーボードバッファの中身が空かどうか?を知りたいのです…。 たとえば、scanf()で指定文字数まで読み込む場合、 指定文字数を超えた入力は、キーボードバッファに残っていますよね。 その存在を知りたいのです。 調べ方が悪いのだと思いますが、どうぞよろしくお願いします。 |
No.16546![]() |
Re:ご教授お願いいたします。 投稿者---おでん(2004/09/03 16:02:54) |
||
>>WindowsAPIのGetAsyncKeyStateあたりを調べると、幸せになれると思います。 > >調べてみたのですが、わかりませんでした。 >どのキーが押されているか?ではなくて、 >あくまで、キーボードバッファの中身が空かどうか?を知りたいのです…。 > >たとえば、scanf()で指定文字数まで読み込む場合、 >指定文字数を超えた入力は、キーボードバッファに残っていますよね。 >その存在を知りたいのです。 > 時間がないので・・・ http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_getnumberofconsoleinputevents.htm http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_peekconsoleinput.htm |
No.16547![]() |
ありがとうございます。 投稿者---masay(2004/09/03 16:06:49) |
||
さっそく調べてみます。 どうもありがとうございました。 |
No.16554![]() |
度々申し訳ありません。 投稿者---masay(2004/09/03 17:05:30) |
||
コンソール入力バッファのハンドルというのが良く分からなかったので まずは以下のようにしてみました。 int count; if(!GetNumberOfConsoleInputEvents(stdin, &count)){ printf("エラー\n"); } 当然ながら駄目でした。 で、少し調べて以下のように修正しました。 int count; HANDLE hd; hd = GetStdHandle(STD_INPUT_HANDLE); if(!GetNumberOfConsoleInputEvents(hd, &count)){ printf("エラー\n"); } この場合、エラーにはならないのですが思うような値が返ってきません。 他に何か設定する必要があるのでしょうか? お忙しいところすみませんが、よろしくお願いいたします。 |
No.16557![]() |
Re:度々申し訳ありません。 投稿者---三毛猫(2004/09/03 17:25:22) |
||
単純にキーバッファが空かどうかを調べるだけでしたら、 _kbhitを使ってみてはいかがでしょう。 |
No.16559![]() |
早速調べてみます!!!。 投稿者---masay(2004/09/03 17:40:46) |
||
>_kbhitを使ってみてはいかがでしょう。 ありがとうございました。 |
No.16562![]() |
上手くいきません…。すみませんがお願いします。 投稿者---masay(2004/09/03 17:54:36) |
||
色々試したのですが…。上手くいきません。 以下、試しているサンプルプログラムです。 最大でmaxSizeバイトの文字をdataに格納します。 maxSize以上の入力があったときは、 fflush(stdin); で、消去しています。 しかし、その前にmaxSizeを超えての入力があったかどうかを 調べたいのです。 このサンプルでは、_kbhit()でバッファを見ようとしているのですが いくら入力しても0が返ってきてしまいます。 どうしてでしょうか? fgets()がいけないのでしょうか…。 よろしくお願いいたします。 void getData(char* data, int maxSize){ int i; int count; // 初期化 memset(data, 0, maxSize+1); // maxSizeを超えての入力は無視することとする fgets(data, maxSize+1, stdin); // fgets()は、改行も読み込んでしまうため調整 for(i=0; i<maxSize; i++){ if(data[i] == '\n'){ data[i] = '\0'; break; } } count = _kbhit(); printf("テスト:%d\n",count); fflush(stdin); // キーボードバッファのクリア return; } |
No.16560![]() |
Re:度々申し訳ありません。 投稿者---Sciggepy(2004/09/03 17:41:30) |
||
マウスイベントなどもカウントしているのではないでしょうか。 PeekConsoleInput関数で、入力の内容を調べる必要があるかもしれません。 INPUT_RECORD構造体のEventTypeがKEY_EVENTの場合、キー入力が存在します。 未処理の入力を同時に削除するには、ReadConsoleInputを使います。 |