При наборе клавиш слышны звуки - ступор при написании программы
Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain
Пишу программу на С++ - цель которой воспроизвести действие "пианино". Но при нажатии клавиш слышны звуки. Можно ли это исправить. Существует ли какие-то программные или какие-то другие методы. Раньше писал на VB6 (несколько лет назад) - таких проблем не было.
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Чем компилируешь и на какой операционной системе запускаешь?
Спикер пищит в том случае, если системный буфер клавиатурных кодов переполнен. Это часто случалось в DOS приложениях, где он был достаточно короткий, к тому же функции, подобные getch() его обрабатывали посимвольно, каждый раз возвращая управление в программу, что позволяло легко "забить" буфер нажатиями быстрее, чем программа их успеет обработать. Решить проблему множества одновременных нажатий можно было лишь перейдя на другой уровень обработки: считывая данные напрямую из клавиатурного буфера через прерывания и очищая его вручную.
Под Windows проблема видоизменилась и практически полностью потеряла воспроизводимость. Произошло это в первую очередь благодаря изменившемуся подходу к обработке нажатий клавиатуры. Нажатия начала обрабатывать операционная система, став посредником и вызывая у программы лишь обработчики сообщений. В таких условиях переполнения клавиатурного буфера стало возможно воспроизвести только при зависании всей операционной системы, так как во всех остальных случаях Windows грамотно и своевременно очищает буфер.
Спикер пищит в том случае, если системный буфер клавиатурных кодов переполнен. Это часто случалось в DOS приложениях, где он был достаточно короткий, к тому же функции, подобные getch() его обрабатывали посимвольно, каждый раз возвращая управление в программу, что позволяло легко "забить" буфер нажатиями быстрее, чем программа их успеет обработать. Решить проблему множества одновременных нажатий можно было лишь перейдя на другой уровень обработки: считывая данные напрямую из клавиатурного буфера через прерывания и очищая его вручную.
Под Windows проблема видоизменилась и практически полностью потеряла воспроизводимость. Произошло это в первую очередь благодаря изменившемуся подходу к обработке нажатий клавиатуры. Нажатия начала обрабатывать операционная система, став посредником и вызывая у программы лишь обработчики сообщений. В таких условиях переполнения клавиатурного буфера стало возможно воспроизвести только при зависании всей операционной системы, так как во всех остальных случаях Windows грамотно и своевременно очищает буфер.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Компилятор - Visual C++ 2010
Система - Windows 7 SP1
может кто-то подскажет код или что-то такое
Система - Windows 7 SP1
может кто-то подскажет код или что-то такое
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
А как считываешь нажатия? Обрабатываешь WM_KEYDOWN?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Не пойму, о каких звуках речь? Может, воспроизводится системный звук "Стандартный звук"?
Фокус форме дать не пробовали?
Фокус форме дать не пробовали?
It's a long way to the top if you wanna rock'n'roll
"Считываю" нажатия через OnKeyDown
При запуске окно и так в фокусе.
При нажатии клавиши иногда слышен "Стандартный звук" - хотя должно быть слышно только нотные звуки
При запуске окно и так в фокусе.
При нажатии клавиши иногда слышен "Стандартный звук" - хотя должно быть слышно только нотные звуки