Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > как узнать раскладку


Автор: Budy 27.4.2005, 10:32
:Приветствую
Как мона узнать раскладку клавиатуры, но не в своей проге, а в активной. Ну например через таймер проверять.

Автор: Rouse_ 27.4.2005, 11:47
Код

procedure TfrmMain.Timer1Timer(Sender: TObject);
var
  FID: Cardinal;
begin
  FID := GetWindowThreadProcessId(GetForegroundWindow, nil);
  AttachThreadInput(GetCurrentThreadId, FID, True);
  Caption := IntToStr(GetKeyboardLayout(FID) and $FFFF);
  AttachThreadInput(GetCurrentThreadId, FID, False);  
end;

Автор: Akella 27.4.2005, 14:05
Код

Function TfmMain.LayOut:String;
Var
  pch: PChar;
Begin//проверяем раскладку
  GetMem(pch, 100);
  GetKeyboardLayoutName(pch);
  if pch='00000419' then Result:='ru';
  if pch='00000409' then Result:='en';
  FreeMem(pch);
end;



а так мона изменять
Код

Procedure TfmMain.ChKeyb;
var
 Layout: array[0.. KL_NAMELENGTH] of char;
begin//если включен Scroll Lock, то включаем русскую раскладку
     //иначе английскую
  if GetKeyState(vk_scroll)=0 then
   LoadKeyboardLayout( StrCopy(Layout,'00000419'),KLF_ACTIVATE) // русская
  else
   LoadKeyboardLayout(StrCopy(Layout,'00000409'),KLF_ACTIVATE) // английская
end;

Автор: Rouse_ 27.4.2005, 15:40
dsergey, ему в чужом приложении нужно...

Автор: Budy 30.4.2005, 10:59
Rouse_, ага, надобно чужое проверять, а точнее то, которое активно.

Автор: RA 30.4.2005, 12:24
Я там это реализовал через Dll ->
http://forum.vingrad.ru/index.php?act=Attach&type=post&id=261960

Автор: Rouse_ 30.4.2005, 13:38
Цитата(Budy @ 30.4.2005, 11:59)
Rouse_, ага, надобно чужое проверять, а точнее то, которое активно.

Ну так я же тебе в первом сообщении показал код...

Автор: Medved 30.4.2005, 18:39
Ловить сообщение Windows о смене раскладки (забыл какое, найти это не сложно). По таймеру - имхо топорно очень.

Автор: RA 30.4.2005, 19:04
Цитата(Pegas @ 30.4.2005, 18:39)
- имхо топорно очень.

солидарен. smile

Автор: Budy 5.5.2005, 08:18
Спасибо, посмотрел все, но код от Rouse_'а больше подходит

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)