Оригінальний текст

{ **** 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);

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*