Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > WinAPI
Перезагрузить страницу GetKeyboardLayout() всегда возвращает ангийскую раскладку
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
agronomchek agronomchek вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 01.03.2012
По умолчанию GetKeyboardLayout() всегда возвращает ангийскую раскладку - 17.06.2012, 22:06

Доброго времени суток, товарищи!

Есть служба, внутри которой постоянно должна проходить проверка текущей раскладки и, с учетом её, расишифровывать сканкод в символ ASCII, но GetKeyboardLayout() всегда возвращает значение 00x0409, что есть раскадка US. Но 00x0419 (Русский), не возвращается. Ниже привожу кусок кода.


cpp Код:
char GetSymbolFromScancode(UINT scanCode) // переводит код нажатой клавиши в текст
{
    BYTE btKeyState[256];
    HKL hklLayout = GetKeyboardLayout(GetWindowThreadProcessId(GetForegroundWindow(), NULL)); // узнаем язык клавиатуры
    unsigned short Symbol[2];
    GetKeyboardState(btKeyState);
    if((ToAsciiEx(MapVirtualKey(scanCode, 3), MapVirtualKey(scanCode, 2), btKeyState, Symbol, 0, hklLayout) == 1)
    {
         return Symbol[0];
    }
     return -1;
}

Подскажите, пожалуйста, что я делаю не так?
Ответить с цитированием
  (#2 (permalink)) Старый
kovalev kovalev вне форума
Новичок
 
Сообщений: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.10.2012
По умолчанию 09.10.2012, 23:59

Вот маленькая программа. Все работает, но там локальный хук:

delphi Код:
program Example;

uses
  Windows, Messages;

var
  wClass: TWndClass;
  Msg: TMsg;
  Win: HWND;
  Hook: HHook = 0;

function WindowProc(Win, Msg, WP, LP: Integer): Integer; stdcall;
begin
  case Msg of

    WM_DESTROY:
      PostQuitMessage(0)

  end;
  Result := DefWindowProc(Win, Msg, WP, LP)
end;

function HookProc(Code: LongInt; WP, LP: LongInt): LongInt stdcall;
var
  KeyName: array[0..255] of Char;
  PC: PChar;
  KLayout: HKL;
  S1, S2: string;
begin
  if (Code = HC_ACTION) and ((LP shr 31) = 1) then
  begin
    GetKeyNameText(LP, KeyName, $FF);
    KLayout := GetKeyboardLayout(GetWindowThreadProcessId(Win, nil));
    Str(KLayout, S1);
    PC := PChar(S1);
    S1 := string(PC);
    PC := PChar([указатель]KeyName);
    S2 := string(PC);
    SetWindowText(Win, PChar(S1 + ',  ' + S2));
  end;
  Result := CallNextHookEx(Hook, Code, WP, LP);
end;


BEGIN
  with wClass do
  begin
    lpszClassName:= 'asd';
    lpfnWndProc :=  [указатель]WindowProc;
    hbrBackground := 1;
    hCursor := LoadCursor(0, IDC_ARROW)
  end;
  RegisterClass(wClass);

  Win := CreateWindow(wClass.lpszClassName, 'Заголовок программы',
    WS_OVERLAPPED or WS_SYSMENU or WS_MINIMIZEBOX or WS_VISIBLE,
    400, 300, 340, 217, 0, 0, hInstance, nil);

  SetWindowsHookEx(WH_KEYBOARD, HookProc, hInstance, 0);

  while GetMessage(Msg, 0, 0, 0) do
  begin
    TranslateMessage(Msg);
    DispatchMessage(Msg)
  end;
END.

Последний раз редактировалось kovalev; 10.10.2012 в 00:13 Причина: Защита от спама (символы "@" не проходят)
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как всегда сборка компьютера =) SteelLion Подбор комплектующих 22 09.05.2012 21:35
Не всегда запускается Windows Dmitrall Любые вопросы от новичков 16 28.03.2012 17:16
WORD не переключает раскладку клавиатуры на английскую Ines2011 Любые вопросы от новичков 3 20.10.2011 08:41
DVI-I >>> VGA = Всегда 60 герц! vater Видеокарты 10 20.06.2011 18:39
Каким образом iSendSMS переключает раскладку клавиатуры? splin 1974 Любые вопросы от новичков 1 18.08.2010 07:46
Мат.Плата не всегда стартует Cheburashka)) Материнские платы 10 26.05.2010 15:00
Как узнать текущую раскладку клавиатуры Exmap .NET 7 22.03.2009 15:07
Не могу набрать пароль, нет нужного языка, как востановить раскладку клавиатуры? Travych Любые вопросы от новичков 1 12.10.2008 20:44
Как добавить язык в раскладку клавиатуры? lecha22 Любые вопросы от новичков 1 08.09.2008 00:09
Как при запуске программы проверять раскладку клавиатуры RU/EN Paha Visual C++ 1 09.05.2006 19:58
Как сделать раскладку клавиатуры gerasim_sergey Smalltalk 2 10.06.2004 22:14



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов