Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
ВнизПереключение раскладки клавиатуры в другом приложении. Найти похожие ветки
← →
bmai (2002-06-05 04:31) [0]Приветствую всех
Вопрос передачи символов в другое приложение тут много раз обсуждался, но есть одна его сторона, которая не затрагивалась (ну либо я не достаточно усердно искал).
Мне понадобилось временно переключить раскладку клавиатуры в другом приложении, в которое мое посылает "нажатия клавиш".
Считываю и запоминаю текущую раскладку так:
tid := GetWindowThreadProcessID(Wnd, @pid);
myhkl := GetKeyboardLayout(tid) And $FFFF;
Требуется что-то типаSetKeyboardLayout(tid, myhkl)
, а такой функции нет. Кто-нибудь может предложить чем ее заменить?
На данный момент посылаю эмуляцию нажатия Ctrl-Shift и Alt-Shift до тех пор, пока не "дощелкаю" до нужного языка, но от такого способа за свою программу делается стыдно. :)
Заранее спасибо.
← →
bmai (2002-06-05 06:47) [1]Только что обнаружил рассмотренный 2 недели назад аналогичный вопрос и попробовал вариант
kl:=LoadKeyboardLayout("00000419",KLF_ACTIVATE);
Sendmessage(GetActiveWindow, WM_INPUTLANGCHANGE, 0, kl);
Не знаю, опробовали ли его перед тем как советовать, но по крайней мере у меня и под XP и под W2K переключается раскладка в моем же приложении, а не в другом. Все перепробовал, и sleep ставил после активизации другого окна, перед SendMessage, и даже делал
While (GetActiveWindow <> myHndl) do
Application.ProcessMessages;
гдеmyHndl
- тот самый handle, по которому я делаю другое приложение активным.
Ничего не помогает.
← →
sizmrebi (2002-06-05 08:31) [2]ActivateKeyboardLayout();
← →
bmai (2002-06-05 16:02) [3]2sizmrebi
Делал уже. Тот же эффект - под W2K переключает в окне моей программы, а не в той, которая активна в данный момент.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.08.12;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.005 c