![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| timself |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Подскажите, пожалуйста, как в своей программе отловить момент смены раскладки клавиатуры (языка ввода). Причем не важно как она происходит, программно или по нажатию Ctrl+Shift, или еще как, тут важен сам факт. Какие языки в системе - тоже не важно.
Отлов нажатия спец. клавиш мне не подходит: procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
Пробовал делать и так:
Это работает. Но это тупо! (тут каждые полсекунды таймер проверяет раскладку). Может система выдает сообщение о смене раскладки? Подскажите как сделать... |
||||
|
|||||
| Rrader |
|
|||
|
Inspired =) ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1535 Регистрация: 7.5.2005 Репутация: 70 Всего: 191 |
Ловить сообщение WM_INPUTLANGCHANGEREQUEST
|
|||
|
||||
| timself |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
А можно пример, хоть простенький, как отловить это сообщение?
(с синтаксисом не особо знаком) |
|||
|
||||
| Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 1 Всего: 11 |
Catch The Mess ;) -------------------- ![]() |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
Christoph, ммм у меня не работает, потому что виста. если ОС виста то я по таймеру смотрю какой язык, но наверно есть болие лучшее решение.
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 1 Всего: 11 |
Frees, на ХР работает, мне кажется что это самый простой способ словить сообщение
-------------------- ![]() |
|||
|
||||
| Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 9 Всего: 54 |
Christoph, согласен что самый простой, тока хочется что бы и в висте работало, может для вистой месагу другую надо ловить
-------------------- Кольцов Виктор Владимирович |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
в инете однозначного решения проблемы не нашел, но народ тоже с эти сталкивается.
имхо надо копать в сторону ITfLanguageProfileNotifySink -------------------- There are always someone smarter than you... |
|||
|
||||
| Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 53 Всего: 133 |
Christoph, про соглашение об именах процедур что-нить читал? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
| timself |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Надо так делать..., но не могу теперь установить локальный хук! (Vista)
Копилятор стопорится на SetWindowsHookEx. Пишет, что: Incompartible tipes: "Integer" and "Cardinal" Где тут ошибка ??? Ничего не пойму...
|
|||
|
||||
| Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 1 Всего: 11 |
Я Исправлюсь -------------------- ![]() |
|||
|
||||
| MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 62 Всего: 128 |
сверь типы параметров у SetWindowsHookEx
-------------------- There are always someone smarter than you... |
|||
|
||||
| timself |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Спасибо, с этим я разобрался, там ошибка синтаксиса MsgHookProc вместо @MsgHookProc.
Но WM_INPUTLANGCHANGE и WM_INPUTLANGCHANGEREQUEST всё равно не ловятся под OS Vista. Перепробывал все варианты, не отлавливается, и всё тут. Может в Висте другое сообщение при смене раскладки... Это напасть какая-то. |
|||
|
||||
| Christoph |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 667 Регистрация: 23.1.2008 Где: Харьков Репутация: 1 Всего: 11 |
Может быть ActivateKeyboardLayout, но я не знаю подойдет ли для твоей задачи или нет :(
-------------------- ![]() |
|||
|
||||
| timself |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 50 Регистрация: 14.2.2007 Репутация: нет Всего: нет |
Проблема решена обходным методом. Сообщение так и не удалось поймать...
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |