|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
02.06.2008, 01:39 | #11 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Тогда покажите, как выглядит Ваш хук. А то мы всё вокруг да около.
|
02.06.2008, 02:21 | #12 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 22
|
Да, собственно, вполне стандартно и безобидно вот библиотека: Код:
Код:
Код:
|
02.06.2008, 03:14 | #13 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
Значит, первое, что бросилось в глаза.
1. Нужна ли Вам AttachThreadInput? Если вся её задача состоит в получении фокуса, то это можно сделать так: http://programmersforum.ru/showpost....75&postcount=9 2. Есть ли вообще смысл в пересылке сообщений "хозяину" хука? (насколько я понял TfrmMain.Hooking - это обработчик CM_TKHOOK в "главном" процессе). Отправить WM_CHAR можно меньшими усилиями уже находясь в "нужном" потоке (или по крайней мере, процессе) внутри хука. 3. В строке 38 Вы закрываете хэндл не в том месте (внутри еще одного условия). Да и зачем, вообще, Вы каждый раз открываете/закрываете мэппинг, если это достаточно сделать при инициализации/выгрузке Ваше Dll? Это, кстати, не самая быстрая операция. 4. Не изменится ли картина если после строки 39 не передавать сообщение следующему хуку? |
03.06.2008, 20:56 | #14 | |||
Пользователь
Регистрация: 30.05.2008
Сообщений: 22
|
Цитата:
Цитата:
Цитата:
Нет, IE7 как падал, так и падает. Да и нельзя этого делать - умирают клавиатурные хуки других приложений. |
|||
06.06.2008, 03:44 | #15 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 22
|
Все оказалось достаточно элементарно. Вместо WM_CHAR нужно использовать WM_IME_CHAR. IE перестает падать, все прекрасно работает в FireFox, Word и т.д.
B_N, большое спасибо за помощь! |
06.06.2008, 11:30 | #16 |
я получил эту роль
Старожил
Регистрация: 25.05.2007
Сообщений: 3,694
|
* HINT: Не используйте в хуковых процедурах (и callback-процедурах вообще) SendMessage, иначе зависнувший хук может потащить за собой приложение.
Лучше PostMessage
пыщь
|
06.06.2008, 17:15 | #17 | |
Пользователь
Регистрация: 30.05.2008
Сообщений: 22
|
Цитата:
В общем так: IE глючил именно из-за SendMessage. Правда в сочетании с WM_IME_CHAR он как-то её переваривал. С PostMessage дружат все (и Word и Photoshop, и FireFox, и д.р.). Для отправки символов с кодом >=255 нужно просто использовать PostMessageW. Но тут начинается другое шаманство: большая часть программ прекрасно работает с PostMessage/PostMessageW + WM_CHAR. Но есть софт (FireFox, редактор Delphi) которые переваривают только WM_IME_CHAR. Интересно, есть умный способ это обойти? |
|
06.06.2008, 17:26 | #18 |
Новичок
Джуниор
Регистрация: 18.01.2008
Сообщений: 1,720
|
В качестве варианта - проверяйте нужное окно через IsWindowUnicode, а по результату PostMessageA или PostMessageW (функции PostMessage не существует). А ещё лучше - всю цепочку, включая GetKeyNameText. JTG правильно написал, я уже и сам только потом заметил, что там SendMessage, но падало всё по-моему не от этого, какой-то глюк Вы обнаружили, по всей видимости, просто WM_CHAR - это по идее уже оттранслированное через TranslateMessage сообщение, а Вы его отправляете в юникод-окно в качестве такового, но в ANSI-виде.
|
06.06.2008, 21:24 | #19 |
Пользователь
Регистрация: 30.05.2008
Сообщений: 22
|
IsWindowUnicode, к сожалению, не показатель. Дело в том, что некоторые Юникодные окна нормально работают с WM_CHAR и не работают с WM_IME_CHAR и наоборот. Сейчас у меня следующий код
Код:
|
08.04.2012, 10:46 | #20 |
Новичок
Джуниор
Регистрация: 08.04.2012
Сообщений: 4
|
Прошло почти 4 года с последнего UP'а топика
Но, все же, если автору несложно - можете скинуть работающий код? У меня в Mozilla Firefox при длительных танцах с бубном не вставляет unicode символы. В остальные места, которые тестил - все ок. Версия Мозиллы 11.0. Вставляю по горячей клавише в активный контрол активного окна. Код:
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вставка текста в RichEdit | NoName_emaNoN | Компоненты Delphi | 4 | 03.05.2008 12:12 |
чужое приложение | Electrod | Win Api | 12 | 27.01.2008 17:04 |
Вставка текста | Pedro | Общие вопросы Delphi | 4 | 27.01.2008 10:27 |
! Вставка текста ! | ♠STO♠ | Общие вопросы Delphi | 2 | 30.08.2007 17:05 |
Как активировать чужое приложение | Hintman | Win Api | 3 | 30.04.2007 16:24 |