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


Автор: December 15.7.2003, 21:22
Greetings All!
Кто поделится опытом, почему простенькие строчки

Код

keybd_event(VK_CONTROL,0,0,0);
keybd_event(VK_SHIFT,0,0,0);

keybd_event(VK_CONTROL,0,KEYEVENTF_KEYUP,0);
keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);

не дают требуемого эффекта (то есть не переключают язык)?

Автор: <Spawn> 16.7.2003, 05:27
Для данной задачи, помоему, лучше было бы использовать GetkeyboardLayout, ActivateKeyboardLayout

Автор: RA 16.7.2003, 11:02
Может попробовать передеть их какомунить окну.

Автор: December 16.7.2003, 19:34
Да нет, хочется именно через эмуляцию клавы.
Тут глючок похуже вылез - не отжимается Shift!!!!
Из-за этого начинаются совсем непонятные всёлости... Кто-нибудь с этим сталкивался?

Автор: December 18.7.2003, 20:41

Greetings All!
Вот, разобрался, хочу поделиться радостью, поскольку в том SDK Help, который к Delphi приклеен, такого не сыщешь. Как нужно делать:
Код

procedure KeyDive(Key:integer);
begin
keybd_event(Key, mapvirtualkey(Key, 0), KEYEVENTF_EXTENDEDKEY, 0);
end;

procedure KeyUp(Key:integer);
begin
keybd_event(Key, mapvirtualkey(Key, 0), KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
end;


Один товарисч ещё предлагает вместо последнего нуля при вызове функции звать GetMessageExtraInfo, но реальной пользы от этого я не уловил.

Автор: Pakshin A. S. 20.7.2003, 19:55
Ещё выриант:
Код

procedure SetRus;
var
rus:HKL;
begin
try
 rus:=LoadKeyboardLayout('00000419', 0);
 ActivateKeyboardLayout(rus, 0);
except
 ShowMEssage('Попытка не удалася!');
end;
end;

procedure SetLat;
var
Lat:HKL;
begin
try
 Lat:=LoadKeyboardLayout('00000409', 0);
 ActivateKeyboardLayout(Lat, 0);
except
 ShowMEssage('Попытка не удалася!');
end;
end;

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