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