Как проверить, есть ли чтото в буфере ввода клавиатуры?
BOOL m_keypr
{
HANDLE m_stdin;
DWORD m_bytes_avail=0;
m_stdin=GetStdHandle(STD_INPUT_HANDLE);
if (PeekNamedPipe(m_stdin, NULL, 0, NULL, &m_bytes_avail, NULL
{
if (m_bytes_avail>0) return TRUE;
}
return FALSE;
};
Не работает (PeekNamedPipe всегда возвращает ошибку "номер 6").
Если заменить на ReadFile, то основная программа, при обрщении к m_keypr, останавливает работу до тех пор, пока в буфере не появится чтото, с '\n' на конце (чтото типа блокирующего чтения).
на C пишешь или на C++?
Visual C++
так пиши тогда cin.peek
![](/images/graemlins/frown.gif)
UP
я помню, в досе был соответствующий флаг. Собсна, он был не в досе, а вообще на х86, но я не уверен и даже сомневаюсь, что он будет работать в винде. Если думаешь, что это может помочь, я поищу в своих паскалевских прогах.
она могла возвращать некое значение, которое означало, что в буфере клавы что-то есть. А потом с помощью той же ф-ции можно это "что-то" считать.
Никаких пауз и ожиданий эта ф-ция не делает.
Могу с большой степенью точности предположить, что значение свое эта функция брала из блока памяти 0x0040:xxxx
Двадцатый раз читаю и не понимаю постановки задачи.
Проверить неблокирующим образом, есть ли чтолибо в stdin ?
Оставить комментарий
vertyal17
Всем приветВобщем столкнулся с такой проблемой:
Вот моя программа KEY: (здесь практически весь текст программы, нет только без шапки)
Все работает, но есть GUI программа, которая запускает программу KEY, перенаправляя поток ввода (с помощью Pipe). При этом, при нажатии кнопки 'SEND' в GUI, в пайп посылается строка "qwertest\n"
Вот тут прикол:
Оказывается функции getch и kbhit работают не с потоком ввода. Запущенная из GUI, программа KEY исправно ловит все нажатия клавишы, и выдает отчет на экран. Но если нажать клавишу 'r', то программа запрашивает строку - и после этого уже не чувствует клавиатуру. Зато если нажать 'send' в программе GUI, она отрапортует что приняла
"qwertest".
А хотелось бы, чтобы программа KEY при запуске из GUI вообще забывала и не ощущала клавиатуру, и при нажатии 'send', рапортовала бы о 'q','w','e',"test".
Вобщем функции getch и kbhit не подходят, нужен способ узнать есть ли чтото в STDIN.