Получение раскладки консоли №2 (для новичков)

Тема в разделе "WASM.BEGINNERS", создана пользователем nkode, 13 авг 2010.

  1. nkode

    nkode New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2010
    Сообщения:
    5
    Использую вот эти функции:
    HWND hFocus = GetForegroundWindow();
    HKL hklLayout = GetKeyboardLayout(GetWindowThreadProcessId(hFocus, 0));
    Дело в том, что раскладку клавиатуры GUI окон определяет нормально, а вот КОНСОЛЬНЫЕ не берет.

    Есть возможность поставить глобальный хук, но этот вариант не подходит.

    Есть ли решение, что бы и определить нормально и длл не использовать?

    Что-то я нашел на: http://www.wasm.ru/forum/viewtopic.php?pid=275151, но для меня там слишком сложно написанно, если кто сможет кусок исходника смастерить или объяснить?
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    nkode
    AttachConsole()/GetThreadLocale(). Есчо может подойти GetConsoleKeyboardLayoutName():
    Код (Text):
    1. BOOL GetConsoleKeyboardLayoutName(OUT LPSTR pszLayout)]
    Хотя не подойдёт, наверно она для текущей консоли, мб в мессаге можно указать целевую.
    -
    С запросом к серверу идея хорошая была.
     
  3. nkode

    nkode New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2010
    Сообщения:
    5
    Пробовал делать это следующим образом:
    Код (Text):
    1.         GetWindowThreadProcessId(hFocus,dwProcessID);
    2.         AttachConsole(dwProcessID);
    3.         lcid=GetThreadLocale();
    Дело в том что он возвращает LCID русской локали, хотя пишет латиницей.
    Т.е. этим вариантом я незнаю как определить текущую расскладку в консоли.
    Есть еще предложения?
     
  4. IceCrashLdr

    IceCrashLdr New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2010
    Сообщения:
    193
    http://msdn.microsoft.com/en-us/library/dd319088%28VS.85%29.aspx


    It uses GetACP or GetOEMCP to retrieve the value
     
  5. nkode

    nkode New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2010
    Сообщения:
    5
    2 IceCrashLdr
    Использовал GetACP и GetOEMCP, переключаю раскладку они возвращают одинаковые значения.
    Код (Text):
    1.        
    2.         GetWindowThreadProcessId(hFocus,dwProcessID);
    3.         AttachConsole(dwProcessID);
    4.         codepage=GetACP();
     
  6. nkode

    nkode New Member

    Публикаций:
    0
    Регистрация:
    13 авг 2010
    Сообщения:
    5
    Может у кого есть кусок рабочего кода?
     
  7. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    nkode
    Виньапи ограничены слишком. Пишите дров и получайте что угодно. Эта задача вероятно не имеет решения в U-mode.