Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2

Модерирует : ShIvADeSt

ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142  Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

   

wader



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору


Код:
 
{ **** UBPFD *********** by delphibase.endimus.ru ****
 
Зависимости: Windows, Messages
 
Автор: savva, savva@nm.ru, ICQ:126578975, Орел
 
Copyright: Сапронов Алексей (Savva)
 
Дата: 27 июня 2002 г.
 
**************************************************** }
 
 
 
{типы описываем }
 
const
 
CNT_LAYOUT = 2; // количество известных раскладок
 
ENGLISH = $409;
 
RUSSIAN = $419;
 
 
 
TKbdValue : array [1..CNT_LAYOUT] of LongWord =
 
( ENGLISH,
 
RUSSIAN
 
);
 
TKbdDisplayNames : array [1..CNT_LAYOUT] of string =
 
('English',
 
'Русский'
 
);
 
 
 
{----- собственно сами процедури и функции -----}
 
 
 
{получаем название раскладки}
 
function NameKeyboardLayout(layout : LongWord) : string;
 
var
 
i: integer;
 
begin
 
Result:='';
 
try
 
for i:=1 to CNT_LAYOUT do
 
if TKbdValue[i]=layout then Result:= TKbdDisplayNames[i];
 
except
 
Result:='';
 
end;
 
end;
 
//**************** end of NameKeyboardLayot ***************************
 
{активная раскладка в своей программе}
 
function GetActiveKbdLayout : LongWord;
 
begin
 
result:= GetKeyboardLayout(0) shr $10;
 
end;
 
//***************** end of GetActiveKbdLayot ****************************
 
{активная раскладка в активном окне}
 
function GetActiveKbdLayoutWnd : LongWord;
 
var
 
hWindow,idProcess : THandle;
 
begin
 
// получить handle активного окна чужой программы
 
hWindow := GetForegroundWindow;
 
// Получить идентификатор чужого процесса
 
idProcess := GetWindowThreadProcessId(hWindow,nil);
 
// Получить текущую раскладку в чужой программе
 
Result:=(GetKeyboardLayout(idProcess) shr $10);
 
end;
 
//***************** end of GetActiveKbdLayotWnd **************************
 
{установить раскладку в своей программе}
 
procedure SetKbdLayout(kbLayout : LongWord);
 
var
 
Layout: HKL;
 
begin
 
// Получить ссылку на раскладку
 
Layout:=LoadKeyboardLayout(PChar(IntToStr(kbLayout)), 0);
 
// Переключить раскладку на русскую
 
ActivateKeyboardLayout(Layout,KLF_ACTIVATE);
 
end;
 
//****************** end of SetKbdLayot **********************************
 
{установить раскладку в активном окне}
 
procedure SetLayoutActiveWnd(kbLayout : LongWord);
 
var  
 
Layout: HKL;
 
hWindow{, idProcess} : THandle; // ION T: не используется
 
begin
 
// получить handle активного окна чужой программы
 
hWindow := GetForegroundWindow;
 
// Получить ссылку на раскладку
 
Layout:=LoadKeyboardLayout(PChar(IntToStr(kbLayout)), 0);
 
// посылаем сообщение о смене раскладки
 
sendMessage(hWindow,WM_INPUTLANGCHANGEREQUEST,1,Layout);
 
end;
 
//***************** end of SetLayoutActiveWnd *****************************
 

 
 
 
Пример использования
 
...

Код:
 
{активная раскладка в активном окне}
 
Label1.Caption:= NameKeyboardLayout(GetActiveKbdLayoutWnd);
 
{активная раскладка в своей программе}
 
Label2.Caption:= NameKeyboardLayout(GetActiveKbdLayout);
 
{установить раскладку в своей программе}
 
SetKbdLayout(ENGLISH);
 
{установить раскладку в активном окне}
 
SetLayoutActiveWnd(ENGLISH);
 


Всего записей: 113 | Зарегистр. 26-05-2005 | Отправлено: 14:21 19-09-2006 | Исправлено: wader, 14:25 19-09-2006
   

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Delphi 2
ShIvADeSt (22-03-2007 02:18): http://forum.ru-board.com/topic.cgi?forum=33&topic=8142


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru