Что означает код 0x80, связанный при обращении к элементам управления клавиатурой

StackOverflow https://stackoverflow.com/questions/2746817

Вопрос

Что означает код 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) биты делают то же самое?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top