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

返信する


答えを正確に入力してください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 処理中のキー入力が処理後に表示される

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

by blockhead » 2007年5月19日(土) 22:57

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

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

失礼いたしました。

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

by blockhead » 2007年5月19日(土) 13:05

初めまして。

現在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()

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

ページトップ