И снова о клаве (скорость повтора)
Приложение должно реагировать на нажатие клавиш. Если зажать к-либо клавишу, то событие KeyDown (как процедура отлова сообщения wm_keydown) наступает с определенной частотой, зависящей от настроек в "Панель управления>Клавиатура>Скорость>Скорость повтора" и "задержка перед началом повтора". Если кто знает, подскажите как програмно изменить эти параметры, или как самому проверить нажата ли в данный момент к-либо клавиша и какая именно (аналоги паскалевских readkey и keypressed).
Строго говоря, решить проблему контроля клавиатурных нажатий можно глобально на уровне приложения, например, определив обработчик Application.OnMessage. Полагаю, для этого должны иметься довольно веские причины, обусловленные характером задачи.
Скорость повтора можно изменить:
SystemParametersInfo(SPI_SETKEYBOARDSPEED, timeSpeed, nil, SPIF_UPDATEINIFILE);
где timeSpeed - переменная целого типа, принимающая значения от 0 до 31.
Хочу заметить, что мне не удалось построить ни одного предположения, оправдывающего применение изменения этого параметра приложением, как с точки зрения конструктива архитектуры приложения, так и с точки зрения этики построения взаимодействия приложения с пользователем.
Возможно, нам удастся обсудить Вашу задачу более детально.
С наилучшими пожеланиями, Серый.
1. можно проверять параметр lParam сообщения WM_KEYDOWN на количество срабатываний.
2. можно игнорировать сообщение WM_KEYDOWN и выставить таймер в котором через определенное количество времени проверять состояние клавиш с помощью GetKeyState или GetKeyboardState.
при получении сообщения wm_keydown устанавливай какой-либо флаг, означабщий что клавиша нажата, а при wm_keyup убирай флаг
Цитата: Михаил
при получении сообщения wm_keydown устанавливай какой-либо флаг, означабщий что клавиша нажата, а при wm_keyup убирай флаг
Это если нужно чтобы событие происходило только один раз, а автор (как я понял) хочет изменить частоту события, то бишь если в системе она, к примеру, раз в 0.5 сек., то в приложении она должна быть раз в 2 секунды.
Цитата: Rusd
самому проверить нажата ли в данный момент к-либо клавиша и какая именно (аналоги паскалевских readkey и keypressed).
API GetKeyState, GetKeyboardState.
Цитата: Freeman
API GetKeyState, GetKeyboardState.
Ну я уже вроде указал на эти ф-и в посте #3 :)
То что искал. Всем спасибо.