Страница 1 из 2
Плагин на основе WebBrowser: перехватить клавиши
Добавлено: Ср ноя 01, 2006 21:35
Alextp
Есть LS плагин на основе TWebBrowser (Delphi): OpenOffice.org Viewer.
Не могу релизнуть его из-за одного момента.
Не могу понять, как отдать Листеру наживаемые в браузере кнопки 1-8, F, W, теперь еще и другие (C, L - ну и намутил же Гислер!)
Собственно отдать я могу, но не могу перехватить факт нажатия, т.к. в WB не события OnKeyPress/OnKeyDown, точнее оно есть, но не работает. Как быть?
Добавлено: Ср ноя 01, 2006 22:40
Nik
Я когда-то искал подобную информацию по GekoBrowser (на котором WebView построен), но так и не нашёл ничего дельного

Если найдёшь - поделись, плиз

Добавлено: Ср ноя 01, 2006 22:57
Alextp
Nik
У меня есть кое-что, но как это реализовать, не знаю:
Дали подсказку: по идее, у WebBrowser должна быть структура
OLEINPLACEFRAMEINFO, в которой можно задать такой параметр, как
IOleInPlaceSite::GetWindowContext
Вот в нем, кажется можно задать свой обработчик клавиш или что-то вроде этого.
Подробностей человек не дал, а я сам не разобрался.
Добавлено: Пт ноя 03, 2006 01:27
Alextp
Вот нашел чего:
http://www.swissdelphicenter.ch/en/showcode.php?id=1055
Кажется, это то что нужно.. в примере перехватываются клавиши стрелок.
Edit
Не годится, там задается обработчик Application.OnMessage, которого в плагине - нету.
Добавлено: Пт ноя 03, 2006 11:16
D1P
А так ли нужен этот обработчик? Если я правильно понял задачу - можно пойти по другому пути: поставить хук на нажатия клавиш, все обработчики написать самому на WinAPI. Т.е. отлавливать все нажатия внутри окна листера и проверять, какой именно контрол активен. Хук нужен будет локальный, что реализовать довольно просто.
Хотя я WLX-плаги не писал и с TWebBrowser не ковырялся - возможно там какие-то свои заморочки...
Добавлено: Пт ноя 03, 2006 12:04
Alextp
В крайнем случае подойдет и хук (тем более локальный)... Но если можно реализовать средствами WebBrowser, лучше сделать через него. Интересно, будет этот хук работать с ActiveX?
Добавлено: Пт ноя 03, 2006 13:30
D1P
А почему бы не попробовать? Сейчас по быстрому накидаю код, выложу, как быдет готово.
Добавлено: по быстрому не получилось, на выходных кину.
Добавлено: Сб ноя 04, 2006 11:01
D1P
В общем выяснилось, что хуку плевать на ActiveX, работает как угодно. Но, к моему величайшему позору, нормально работающий локальный хук мне поставить не удалось. Хук ставится согласно всем возможным мануалам, работает - но при переключении на любое окно, кроме моей программы тут же убивает его процесс.
Самое интересное - что раньше я это неоднократно делал и всё работало.
При переделке на глобальный хук - всё работает. В чём проблема - понять не могу.
Здесь небольшая программка, которая отлавливает нажатия клавиш и отслеживает все параметры, с этим связанные. Взять из неё участки кода для плагина труда не составит.
Добавлено: Вс ноя 05, 2006 19:09
Alextp
Посмотрел, не очень понятно (пока). %)
Непонятно, какие участки кода в программе отвечают за хуки. И как надо переписать модуль Hook.pas примен-но к моему плагу... Если найдете время посмотреть на мой плаг, то исходник здесь:
http://wincmd.ru/plugring/OOSimpleViewer.html , в папке WLXViewer...
Добавлено: Вс ноя 05, 2006 20:57
D1P
Гм... я то-думал там простой код... Под hook.pas наверно имеется в виду hook.dpr? Это библиотека, в которой находится сама ловушка...
В общем, посмотрю код плагина, может что придумаю.
Добавлено: Вс ноя 05, 2006 21:06
Alextp
Под hook.pas наверно имеется в виду hook.dpr? Это библиотека, в которой находится сама ловушка...
Да, hook.dpr.
Добавлено: Вс ноя 05, 2006 21:22
D1P
Код из папки WLXViewer не компилится. Ругается на отсутствие Compilers.inc (юнит WBProc). Пробовал Delphi6/Delphi2005.
Могу встроить ловушку в WLXViewerPlain.
Добавлено: Вс ноя 05, 2006 21:36
Alextp
Код из папки WLXViewer не компилится. Ругается на отсутствие Compilers.inc (юнит WBProc).
Ops!! Обновил.
Могу встроить ловушку в WLXViewerPlain.
В WLXViewerPlain нет WebBrowser...
Добавлено: Вс ноя 05, 2006 22:06
D1P
В WLXViewerPlain нет WebBrowser...
А это без разницы. Главное то, что пока я ждал обновления, в Plain-версию хоткей встроил - это оказалось просто. В общем, сейчас приделаю к этой версии, откомментирую и кину.
Добавлено: Вс ноя 05, 2006 22:13
Alextp
Заранее спасибо!
Проверить на этой версии надо так: инсталлируем плагин в TC и
открываем файл - если клавиши "1"-"8" в плагине работают, то все ОК.