Я конвертирую приложение, которое в настоящее время использует DirectInput, для использования RawInput. (DirectInput — это в значительной степени устаревший API.)
К сожалению, несмотря на то, что RawInput является рекомендуемым преемником DirectInput, похоже, что он не предоставляет данные клавиатуры таким же образом, как DirectInput.
DirectInput использует константы DIK_*
. (например, DIK_A
, DIK_RETURN
и т. д.), чтобы определить конкретные физические клавиши на клавиатуре. Эти клавиши одинаковы для всех клавиатур, но не меняются в зависимости от раскладки клавиатуры. (Например, DIK_Q
относится к любой клавише, которая находится в том же физическом месте, что и клавиша Q на стандартной американо-английской клавиатуре QWERTY.) В моем случае это желаемое поведение.
Структура RawInput RAWKEYBOARD
обеспечивает как MakeCode
, так и VKey
. Я не могу использовать VKey
, потому что это зависит от раскладки клавиатуры.
Но MakeCode
не соответствует 1:1 константам DIK_*
. В частности, он не различает левую и правую клавиши Ctrl и Alt, а также большинство клавиш цифровой клавиатуры от других клавиш.
Итак, мой вопрос: можно ли использовать содержимое структуры RAWKEYBOARD
для определения эквивалентной константы DIK_*
? И если предположить, что MakeCode
является частью выяснения этого, могу ли я полагаться на то, что MakeCode
будет постоянным для всех клавиатур, так же, как константы DIK_*
?
Keyboard
, что и сделала XNA Game Studio. Да, раскладки меняются, но, вообще говоря, единственным решением для международных клавиатур является предоставление нескольких различных параметров раскладки и/или меню конфигурации переназначения (я отмечаю это на wiki). - person Chuck Walbourn   schedule 12.05.2016GetKeyNameText
, чтобы получить имя данного ключа. - person Chuck Walbourn   schedule 12.05.2016