処理中のキー入力が処理後に表示される

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
blockhead

処理中のキー入力が処理後に表示される

#1 投稿記事 by blockhead »

初めまして。

現在Dosプロンプトベースで実行できるアプリを作っています。

#consoleでは、1文字入力のInkey$関数が使用できないため、GetAsyncKeyState関数を使用して実現させています。これにより、アプリ自体は問題なく作動するのですが、処理が終了しコマンドプロンプトに戻ったとき、処理中に入力した1文字が表示されてしまいます。
おそらく、キー入力バッファにため込まれた情報がアプリ終了後に掃き出されていると思うのですが、これを表示させないようにする方法が解りません。

試しに、_System_hConsoleInから入力文字を取得しポイントをずらしてみてはと思い、ReadFileを使ってみたのですが、Dos窓がキー入力状態になりENTERを押さないと先に進みません(Input命令を使ったのと同じ状態になります)。
ならばと思い、SetFilePointer関数でポインタを1文字先にずらせば良いかと思ったのですが、SetFilePointerの戻り値に&HFFFFFFFFが返り、失敗してしまいます(この方法は的はずれ?)。

以下、サンプルです。

コード: 全て選択


#console
Dim GKey as Byte

Function MyInput() As Byte
	Dim lDistanceToMove As Long
	Dim Result As DWord

	Print Ex"Please Input \qA\q key ";
	Do
		Sleep(150)
		If GetAsyncKeyState(Asc("A")) And &H8000 then MyInput = Asc("A"):Exit Do
	Loop
	Print Chr$(MyInput)

	Result = SetFilePointer(_System_hConsoleIn, 1, NULL, FILE_CURRENT)
debug

End Function

GKey = MyInput()

どなたかご教授下さい。よろしくお願いいたします。
blockhead

処理中のキー入力が処理後に表示される

#2 投稿記事 by blockhead »

申し訳ありません。自己解決しました。

FlushConsoleInputBuffer でコンソールの入力バッファを破棄する事が出来ました。

失礼いたしました。
返信する