41
и 0x41
- два совершенно разных значения.Второй, 0x41
- это шестнадцатеричное значение для десятичного значения 65, которое является кодом ASCII для «A».Но я предполагаю, что вы уже знаете это, так как вы инициализируете i
до 65 (заглавные буквы ASCII и коды ВК совпадают).
В любом случае, ваш код в некоторой степени работает нормально, если вы пытаетесьрегистрировать нажатия клавиш.Короче говоря, ваша петля задерживается на в слишком долго, чтобы она могла перебирать каждый символ, который требуется 200ms * 26 = 5.2 seconds
.Поэтому, если вы наберете «AAAB» в течение 5,2 секунды, будет зарегистрирован только «AB».Но если задержка слишком мала, вы можете зарегистрировать пресс несколько раз.
Для получения дополнительной информации прочитайте документацию для GetAsyncKeyState .
В любом случае, я бы, вероятно, выбралдругая функция, как упомянуто в примечаниях к документации выше, что-то вроде GetKeyboardState , так как вы обычно используете что-то вроде GetAsyncKeyState
для регистрации нажатий клавиш горячих клавиш или чего-то подобного.то есть.GetAsyncKeyState
хорошо для того, чтобы узнать, была ли нажата клавиша , а не сколько раз, порядок нажатий и т. Д. Цикл, который у вас есть, кажется, действительно подвержен проблемам.
Кроме того, не делайте глупых ключей регистрации ...
РЕДАКТИРОВАТЬ: На самом деле GetKeyboardState
все еще не так уж хорошо для решения.Установка клавиатуры с помощью SetWindowsHookEx была бы намного лучшей альтернативой.Вы можете использовать тип перехвата WH_KEYBOARD_LL
для установки перехвата низкоуровневой клавиатуры с помощью обратного вызова LowLevelKeyboardProc .
Я немного прогуглил и есть макро-программа с открытым исходным кодом, AutoHotkey, который использует этот метод, который, я думаю, вы могли бы посмотреть, если хотите.