Можно ли имея хендл окна, id потока окна и virtual key code клавиши, нажатой в этом окне, определить, какой символ был введен каким-то более простым способом, чем руками узнавать текущую раскладку, состояние клавиш Caps Lock и Shift, строить собственные таблицы и т.д. ?
leo Ну вот это я называю "сделать все руками". А я хочу что-то типа VKToWCHAR(hwnd, threadID, virtual code);
JamesB MapVirtualKeyEx - что-то не хочет работать. Зато прекрасно справляется функция ToUnicodeEx. Вот только она не хочет нормально воспринимать капслок и шифты. Если в третий параметр скормить массив, тупо полученный от GetKeyboardState, то что-то там у них какое-то недопонимание, не работает она так как надо. Что именно нужно отдать в const PBYTE lpKeyState ?
2FED Да MSDN на эту тему похоже писали глухой со слепым. В одном месте говорится the most signing bit, в другом - high-order bit, одно ли это и тоже и что именно какие биты значат - хрен где написано.
> MapVirtualKeyEx - что-то не хочет работать. у меня работает... я из key scancode с помощью этой ф-ии делаю virtual key code, а из него символ уже. (если символ не мапится - то это спец-клавиша, ins, home, del, pgup и т.д.) т.е. два вызова... ты GetKeyboardLayout() используешь, чтоб хендл передать последним аргументом? PS а ну да) код надо писать в хексредакторе чтоб было олдскульно и по-хэкерски) а вот все эти высокоуровневые хреновины, которые сокращают время разработки в 100-300 раз, это для мажоров глупых)
JamesB Я делаю в один вызов. Спасибо, попробую в два через скан код. Использую. Для того чтобы получить ид потока я делаю GetForegroundWindow, а потом - GetWindowThreadProcessId. Это работает для всех, кроме консольных окон. Пока не знаю как для консольного окна узнать раскладку. Консольные окна это ваще хак на хаке - все у них как-то по-хитрому. Ну я думаю не стоит сразу кидаться помидорами)) Одно дело когда речь идет о хобби, другое дело когда это продакшен - сравнивать подходы нельзя, т.к. у них изначально разные задачи Ну а вообще да, плюсадин)
_DEN_ Да вроде всё правильно написано. Самый старший бит, он же стоящий на самой "старшей" позиции - т.е. например в 32-битном числе это просто num>>31.