При наборе клавиш слышны звуки - ступор при написании программы

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

Пишу программу на С++ - цель которой воспроизвести действие "пианино". Но при нажатии клавиш слышны звуки. Можно ли это исправить. Существует ли какие-то программные или какие-то другие методы. Раньше писал на VB6 (несколько лет назад) - таких проблем не было.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Чем компилируешь и на какой операционной системе запускаешь?

Спикер пищит в том случае, если системный буфер клавиатурных кодов переполнен. Это часто случалось в DOS приложениях, где он был достаточно короткий, к тому же функции, подобные getch() его обрабатывали посимвольно, каждый раз возвращая управление в программу, что позволяло легко "забить" буфер нажатиями быстрее, чем программа их успеет обработать. Решить проблему множества одновременных нажатий можно было лишь перейдя на другой уровень обработки: считывая данные напрямую из клавиатурного буфера через прерывания и очищая его вручную.

Под Windows проблема видоизменилась и практически полностью потеряла воспроизводимость. Произошло это в первую очередь благодаря изменившемуся подходу к обработке нажатий клавиатуры. Нажатия начала обрабатывать операционная система, став посредником и вызывая у программы лишь обработчики сообщений. В таких условиях переполнения клавиатурного буфера стало возможно воспроизвести только при зависании всей операционной системы, так как во всех остальных случаях Windows грамотно и своевременно очищает буфер.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

Компилятор - Visual C++ 2010
Система - Windows 7 SP1

может кто-то подскажет код или что-то такое
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А как считываешь нажатия? Обрабатываешь WM_KEYDOWN?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Не пойму, о каких звуках речь? Может, воспроизводится системный звук "Стандартный звук"?
Фокус форме дать не пробовали?
It's a long way to the top if you wanna rock'n'roll
Аватара пользователя
MDCI
Сообщения: 47
Зарегистрирован: 28 фев 2006, 15:25
Откуда: Симферополь
Контактная информация:

"Считываю" нажатия через OnKeyDown
При запуске окно и так в фокусе.
При нажатии клавиши иногда слышен "Стандартный звук" - хотя должно быть слышно только нотные звуки
Ответить