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


Автор: puZzo 2.10.2008, 18:02
Люди, помогите плиз разобраться, на пальцах, желательно по-русски=)))

Как поймать сообщение WM_INPUTLANGCHANGEREQUEST при смене раскладки не только в своем приложении..
я понимаю, что нужно ставить глобальный хук, но здесь я захожу в тупик, как это сделать..локально (в своем приложении я разобрался и сделал), а вот с dll'ой не пойму никак=(( явно не хватает знаний по этой теме..

Желательно было бы пример хорошей документации по хукам..если можно=))

Автор: CodeMonkey 2.10.2008, 18:37
http://www.delphikingdom.ru/asp/viewitem.asp?catalogid=548

Автор: THandle 2.10.2008, 22:24
CodeMonkey, у нас это статья тоже есть:

http://base.vingrad.ru/view/2011-Hooks---aspektyi-realizatsii

Не принципиально конечно, где брать инфу, но все не просто так это в местной базе знаний висит smile 

Автор: CodeMonkey 3.10.2008, 08:06
THandle, я просто тут у вас относительно недавно, а на Королевстве уже больше года. Чьи закоулки мне больше знакомы, оттуда ссылки и кидаю ;)

Автор: puZzo 3.10.2008, 10:13
Спасибо за доку, разобрался, поставил, заработало..вот только появилась другая проблема, при переключении активного приложения, если в нем другая раскладка, хук не срабатывает=( проверил так..в тотале стоит англ., в браузере рус. При переключении между приложениями значок раскладки меняется..а вот мой хук не срабатывает...

Автор: CodeMonkey 3.10.2008, 10:26
Цитата(puZzo @  3.10.2008,  10:13 Найти цитируемый пост)
а вот мой хук не срабатывает...

Так ведь раскладка же не меняется. С чего ж ему срабатывать-то?

Автор: puZzo 7.10.2008, 04:50
Как это не меняется? Язык ввода то изменяется, и индикатор виндовый меняется..да и не только стандартный, у меня стоит панто свитчер, он тоже реагирует..уже думал отслеживать состояние окошка языка(виндовое), но отказался, у меня оно отключено=)) Я так полагаю же должна же быть гдето переменная чтоли, которая отвечает за вводимый язык...

Автор: CodeMonkey 8.10.2008, 17:58
Цитата(puZzo @  7.10.2008,  04:50 Найти цитируемый пост)
Язык ввода то изменяется

Да не меняется он, с чего вы это взяли? smile 
У каждой программы есть своя индивидуальная раскладка. От того, что вы сделали активной вторую программу - ни в первой программе, ни во второй раскладка не меняется. 
Если не понятно, то давайте посмотрим на ваш пример. Начальная позиция: в тотале - англ, в браузере - рус, и тотал активен. Вы переключаетесь на браузер. Конечная позиция: в тотале - англ, в браузере - рус, и браузер активен.
Ну и где же вы увидели здесь переключение раскладки? В тотале как был англ, так и остался - нет переключения. В браузере как был рус, так и остался. Опять-таки нет переключения.
Вы переключидись между приложениями, а не переключили раскладку. Чувствуете разницу?

Цитата(puZzo @  7.10.2008,  04:50 Найти цитируемый пост)
Я так полагаю же должна же быть гдето переменная чтоли, которая отвечает за вводимый язык...

Ну есть. Получить можно, например, http://msdn.microsoft.com/en-us/library/ms646296.aspx-ом.

Автор: BaD_SeCt0R 8.10.2008, 21:15
http://forum.vingrad.ru/faq/topic-174736/kw-раскладка-клавиатура.html

Автор: puZzo 13.10.2008, 17:58
CodeMonkey, спасибо, теперь понял..почти..но как тогда узнать язык ввода в текущем активном окне? хук на любое активное окно и при смене брать его язык ввода?

BaD_SeCt0R, данке=)

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