![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Language [D6, Win95/98, Win2k]
bos © (2002-02-13 12:20:00)Подскажите, как повесить Hook на переключение раскладки клавиатуры?
stx (2002-02-14 10:17:00) [1]а чего ты не хочешь воспользоваться компонентом наподобе KeySpy там есть событие onLayoutChange вешаешь на
него свой обработчик и все в порядке
bos (2002-02-13 15:31:00) [2]Работает но не так как хотелось бы:
function GetLanguage: string;
var
p: PChar;
begin
GetMem(p, KL_NAMELENGTH);
try
GetKeyboardLayoutName(p);
Result := p;
finally
FreeMem(p, KL_NAMELENGTH);
end;
end;
function GetMsgHook(Code: Integer; WParam: wParam; Msg: PMsg): Longint; stdcall;
begin
if Msg.message = WM_INPUTLANGCHANGEREQUEST then begin
MyLanguage;
end; { if }
end;
procedure MyLanguage;
var
slan : string;
begin
slan:=GetLanguage;
if slan="00000409" then begin
// английский флаг
fmMyHints.Image3.Picture:=fmMyHints.Image1.Picture
end;
if slan="00000419" then begin
// российский флаг
fmMyHints.Image3.Picture:=fmMyHints.Image2.Picture
end;
end;
procedure TFmParam.FormCreate(Sender: TObject);
begin
SetWindowsHookEx(WH_GETMESSAGE,@GetMsgHook, 0,GetCurrentThreadId);
end;
процедура MyLanguage работает без проблем (проверял по нажатию кнопки), а вот когда вызывается при переключении раскладки выполняет с точностью до наоборот.