Я хотел бы ответить на вопрос: как узнать, какая раскладка клавиатуры используется? Т.е. на одной из моих систем число 2 имеет знак @. С другой стороны, он имеет знак "-sign (двойная кавычка). Вы говорите, что 9 имеет знак (-sign, а у моего (-sign сверху 0 и знак"-) сверху знака минус.
Windows поставляется по умолчанию с сотнями раскладок клавиатуры (т. Е. Узбекской кириллицей, США, США, по умолчанию, голландский, немецкий и немецкий IBM и т. Д.). AZERTY против QWERTY и так далее.
Реальный вопрос может быть следующим: как программно читать отображение клавиатуры в Windows. Я не знаю. Хотя это будет возможно, если вы узнаете, как вы можете взаимодействовать с файлами драйверов, вы, вероятно, будете быстрее использовать карту, основанную, например, на макетах в моей первой ссылке выше. Когда вы читаете тип клавиатуры из реестра, она охватывает большинство случаев.
В качестве альтернативы, вы можете рассмотреть возможность программной установки липких клавиш для Shift (установите липкие клавиши, отправьте сообщение клавиши Shift и все готово).
(обратите внимание, что ASCII не имеет ничего общего с кодами сканирования клавиатуры. Хотя он мог бы работать для некоторых систем, он никогда не работал бы надежно для всех.)
EDIT: попробуйте создатель раскладки клавиатуры от Microsoft. После процесса создания и небольшого реверс-инжиниринга не составит труда узнать, как пишутся раскладки клавиатуры. Тем не менее, если вам нужна только поддержка одной раскладки клавиатуры, возьмите ее в редакторе, отмените действие Shift и просто программно установите вновь созданную раскладку клавиатуры (и измените ее обратно) до и после того, как кто-то начнет печатать.