функция ToAsciiEx

Тема в разделе "WASM.BEGINNERS", создана пользователем churik, 9 июн 2009.

  1. churik

    churik New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2008
    Сообщения:
    19
    Здравствуйте, моя проблема заключается в следующем:
    По описанию ф-ция ToAsciiEx должна возвращать Ascii-код виртуальной клавиши в зависимости от различных факторов, в том числе и языковой раскладки клавиатуры. Но ниже представленный код возвращает верный код только при английской раскладке, а допустим при русской выдает тот же код, что и при английской.
    Код (Text):
    1. .386
    2. .model flat, stdcall
    3. include \masm32\include\windows.inc
    4. include \masm32\include\user32.inc
    5. include \masm32\include\kernel32.inc
    6. includelib \masm32\lib\user32.lib
    7. includelib \masm32\lib\kernel32.lib
    8. .data?
    9. buf db 256 dup (?)
    10. symb db ?
    11. .code
    12. start:
    13.     invoke OemKeyScan, 41h
    14.     push eax
    15.     invoke GetKeyboardState, offset buf
    16.     invoke GetKeyboardLayout, 0
    17.     pop ebx
    18.     invoke ToAsciiEx, 41h, ebx, offset buf, offset symb, 0, eax
    19.     invoke MessageBoxA, 0, offset symb, offset symb, 0
    20.     invoke ExitProcess, 0
    21. end start
    В чем/где ошибка?
    Спасибо за внимание.
     
  2. q_q

    q_q New Member

    Публикаций:
    0
    Регистрация:
    5 окт 2003
    Сообщения:
    1.706
    churik
    > при русской выдает тот же код
    Быть того не может.

    Если установить язык ввода по умолчанию Русский, то OemKeyScan вернет -1, далее по цепочке ToAsciiEx вернет ноль, а не как не "тот же код". Расшифровку возвращаемых значений читай в документации.
     
  3. churik

    churik New Member

    Публикаций:
    0
    Регистрация:
    28 авг 2008
    Сообщения:
    19
    q_q, спасибо, всему вина - моя невнимательность.