Превратить virtual key code в символ

Тема в разделе "WASM.WIN32", создана пользователем _DEN_, 19 май 2008.

  1. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    Можно ли имея хендл окна, id потока окна и virtual key code клавиши, нажатой в этом окне, определить, какой символ был введен каким-то более простым способом, чем руками узнавать текущую раскладку, состояние клавиш Caps Lock и Shift, строить собственные таблицы и т.д. ?
     
  2. Proteus

    Proteus Member

    Публикаций:
    0
    Регистрация:
    19 июн 2004
    Сообщения:
    344
    Адрес:
    Russia
  3. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Что-то типа
    AttachThreadInput, GetKeyboardState, GetKeyboardLayout, ToAsciiEx\ToUnicodeEx ?
     
  4. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    leo

    Ну вот это я называю "сделать все руками". А я хочу что-то типа VKToWCHAR(hwnd, threadID, virtual code);

    :)
     
  5. JamesB

    JamesB New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2008
    Сообщения:
    66
    MapVirtualKeyEx (MAPVK_VK_TO_CHAR)
    это максимум, что можно сделать

    либо хук (SetWindowsHookEx)
     
  6. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    JamesB

    MapVirtualKeyEx - что-то не хочет работать. Зато прекрасно справляется функция ToUnicodeEx. Вот только она не хочет нормально воспринимать капслок и шифты. Если в третий параметр скормить массив, тупо полученный от GetKeyboardState, то что-то там у них какое-то недопонимание, не работает она так как надо. Что именно нужно отдать в const PBYTE lpKeyState ?
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    _DEN_ ищиш лёгкие пути, не по дзенски это =)
     
  8. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    2FED

    Да MSDN на эту тему похоже писали глухой со слепым. В одном месте говорится the most signing bit, в другом - high-order bit, одно ли это и тоже и что именно какие биты значат - хрен где написано.
     
  9. JamesB

    JamesB New Member

    Публикаций:
    0
    Регистрация:
    3 фев 2008
    Сообщения:
    66
    > MapVirtualKeyEx - что-то не хочет работать.

    у меня работает...
    я из key scancode с помощью этой ф-ии делаю virtual key code, а из него символ уже. (если символ не мапится - то это спец-клавиша, ins, home, del, pgup и т.д.)
    т.е. два вызова... ты GetKeyboardLayout() используешь, чтоб хендл передать последним аргументом?


    PS
    а ну да) код надо писать в хексредакторе чтоб было олдскульно и по-хэкерски) а вот все эти высокоуровневые хреновины, которые сокращают время разработки в 100-300 раз, это для мажоров глупых)
     
  10. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    JamesB

    Я делаю в один вызов. Спасибо, попробую в два через скан код.

    Использую. Для того чтобы получить ид потока я делаю GetForegroundWindow, а потом - GetWindowThreadProcessId. Это работает для всех, кроме консольных окон. Пока не знаю как для консольного окна узнать раскладку. Консольные окна это ваще хак на хаке - все у них как-то по-хитрому.

    Ну я думаю не стоит сразу кидаться помидорами)) Одно дело когда речь идет о хобби, другое дело когда это продакшен - сравнивать подходы нельзя, т.к. у них изначально разные задачи :) Ну а вообще да, плюсадин)
     
  11. maxdiver

    maxdiver Max

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    308
    Адрес:
    Саратов
    _DEN_
    Да вроде всё правильно написано. Самый старший бит, он же стоящий на самой "старшей" позиции - т.е. например в 32-битном числе это просто num>>31.
     
  12. _DEN_

    _DEN_ DEN

    Публикаций:
    0
    Регистрация:
    8 окт 2003
    Сообщения:
    5.383
    Адрес:
    Йобастан
    maxdiver

    Написано-то оно написано, только нифига не работает))