| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Как отловить момент смены раскладки? |
| Автор: timself 20.10.2008, 17:05 | ||||
| Подскажите, пожалуйста, как в своей программе отловить момент смены раскладки клавиатуры (языка ввода). Причем не важно как она происходит, программно или по нажатию Ctrl+Shift, или еще как, тут важен сам факт. Какие языки в системе - тоже не важно. Отлов нажатия спец. клавиш мне не подходит: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Пробовал делать и так:
Это работает. Но это тупо! (тут каждые полсекунды таймер проверяет раскладку). Может система выдает сообщение о смене раскладки? Подскажите как сделать... |
| Автор: Rrader 20.10.2008, 17:36 |
| Ловить сообщение WM_INPUTLANGCHANGEREQUEST |
| Автор: timself 20.10.2008, 22:58 |
| А можно пример, хоть простенький, как отловить это сообщение? (с синтаксисом не особо знаком) |
| Автор: Christoph 21.10.2008, 00:07 | ||
Catch The Mess ;) |
| Автор: Frees 21.10.2008, 06:35 |
| Christoph, ммм у меня не работает, потому что виста. если ОС виста то я по таймеру смотрю какой язык, но наверно есть болие лучшее решение. |
| Автор: Christoph 21.10.2008, 08:59 |
| Frees, на ХР работает, мне кажется что это самый простой способ словить сообщение |
| Автор: Frees 21.10.2008, 10:35 |
| Christoph, согласен что самый простой, тока хочется что бы и в висте работало, может для вистой месагу другую надо ловить |
| Автор: MetalFan 21.10.2008, 11:57 |
| в инете однозначного решения проблемы не нашел, но народ тоже с эти сталкивается. имхо надо копать в сторону ITfLanguageProfileNotifySink |
| Автор: Poseidon 21.10.2008, 11:59 |
| Christoph, про соглашение об именах процедур что-нить читал? |
| Автор: timself 21.10.2008, 15:18 | ||
| Надо так делать..., но не могу теперь установить локальный хук! (Vista) Копилятор стопорится на SetWindowsHookEx. Пишет, что: Incompartible tipes: "Integer" and "Cardinal" Где тут ошибка ??? Ничего не пойму...
|
| Автор: Christoph 21.10.2008, 15:27 | ||
Я Исправлюсь |
| Автор: MetalFan 21.10.2008, 18:47 |
| сверь типы параметров у SetWindowsHookEx |
| Автор: timself 21.10.2008, 23:02 |
| Спасибо, с этим я разобрался, там ошибка синтаксиса MsgHookProc вместо @MsgHookProc. Но WM_INPUTLANGCHANGE и WM_INPUTLANGCHANGEREQUEST всё равно не ловятся под OS Vista. Перепробывал все варианты, не отлавливается, и всё тут. Может в Висте другое сообщение при смене раскладки... Это напасть какая-то. |
| Автор: Christoph 21.10.2008, 23:49 |
| Может быть ActivateKeyboardLayout, но я не знаю подойдет ли для твоей задачи или нет :( |
| Автор: timself 22.10.2008, 22:47 |
| Проблема решена обходным методом. Сообщение так и не удалось поймать... |