Что означает код 0x80, связанный при обращении к элементам управления клавиатурой
Вопрос
Что означает код 0x80, когда обращается к элементам управления клавиатурой в среде Windows C ++?
Например,
if(GetKeyState('K') & 0x80) {
//do something
}
Спасибо всем!
Нет правильного решения
Другие советы
Обновлять
Шипаркость пониженных половых видов продвинула меня в расследовании этого дальше. Вот как возвратные значения (в Hex) GetKeyState
работает. Я не совсем получаю тумблерную собственность ключа, как k
Но я предполагаю, что есть некоторое состояние по умолчанию, от которого он переключается.
0 Default State, key up
ff80 Default state, key down
1 Toggled, key up
ff81 Toggled, key down
Так 0xff80
добавляется всякий раз, когда необходимо установить бит высокого порядка, и бит низкого качества имеет смысл. Так что теперь мы знаем, почему 0x80
Подход работает - - поскольку настроен небольшой бит нижнего байта!
Старый ответ
GetKeystate Возвращает А. SHORT
где если бит с высоким порядком 1
Это означает, что ключ вверх. То побито Операция с 0x80
просто проверяет, если этот бит 1
поскольку в двоичном 0x80
является 10000000
.
Поэтому утверждение GetKeyState('K') & 0x80
вернется 0x80
Если бит высокого порядка значения возвращается GetKeyState('K')
является 1
и 0
Если бит с высоким порядком 0
.
То MSDN Документация функции состояния:
Если бит высокого порядка 1, ключ находится вниз; В противном случае это вверх.
бит-мудрый и с 0x80 дает вам бит высокого порядка, if
Проверяет, является ли результат нулевым или ненулевым, и по сути проверяет значение этого бита.
Эта проверка, однако, похоже на ошибку с момента GetKeyState()
Возвращает А. SHORT
И чтобы проверить бит высокого порядка коротким, вам нужно бидиться и с 0x8000.
Поэтому я предлагаю вам проверить возвращаемое значение с отладчиком и проверить, как это работает в реальности.
Я думаю, что вы имеете в виду 0x8000, а не 0x80. Если это так, вы должны проконсультироваться с документацией (http://msdn.microsoft.com/en-us/library/ms646301(vs.85).aspx.) который имеет следующее, чтобы сказать на возвращенном значении GetKeyState: -
Возвращаемое значение указывает состояние указанного виртуального ключа следующим образом:
• Если бит с высоким порядком 1, ключ находится вниз; В противном случае это вверх. • Если бит нижнего порядка 1, ключ переключается. Ключ, такой как клавиша блокировки CAPS, переключается, если он включен. Ключ выключен и не отображается, если бит низкого уровня составляет 0. Индикатор индикатора ключа Toggle (если есть) на клавиатуре будет включен, когда ключ переключается, и выключен, когда ключ не отображается.
0x80 не означает ничего, что я знаю, хотя
В соответствии с Документация
Возвращаемое значение указывает состояние указанного виртуального ключа:
Если бит высокого порядка 1, ключ находится вниз; В противном случае это вверх.
Если бит низкого порядка 1, ключ переключается. Ключ, такой как клавиша блокировки CAPS, переключается, если он включен. Ключ выключен и не отображается, если бит низкого уровня составляет 0. Индикатор индикатора ключа Toggle (если есть) на клавиатуре будет включен, когда ключ переключается, и выключен, когда ключ не отображается.
Возможно, с нежирным ключом (такой k '), низкий порядок (неоднозначный термин - возможно, они имеют в виду 0x0080?) И высококачественные (0x8000) биты делают то же самое?