Плагин на основе WebBrowser: перехватить клавиши
Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik
Плагин на основе WebBrowser: перехватить клавиши
Есть LS плагин на основе TWebBrowser (Delphi): OpenOffice.org Viewer.
Не могу релизнуть его из-за одного момента.
Не могу понять, как отдать Листеру наживаемые в браузере кнопки 1-8, F, W, теперь еще и другие (C, L - ну и намутил же Гислер!)
Собственно отдать я могу, но не могу перехватить факт нажатия, т.к. в WB не события OnKeyPress/OnKeyDown, точнее оно есть, но не работает. Как быть?
Не могу релизнуть его из-за одного момента.
Не могу понять, как отдать Листеру наживаемые в браузере кнопки 1-8, F, W, теперь еще и другие (C, L - ну и намутил же Гислер!)
Собственно отдать я могу, но не могу перехватить факт нажатия, т.к. в WB не события OnKeyPress/OnKeyDown, точнее оно есть, но не работает. Как быть?
Я когда-то искал подобную информацию по GekoBrowser (на котором WebView построен), но так и не нашёл ничего дельного
Если найдёшь - поделись, плиз 
Качественный хостинг.
Nik
У меня есть кое-что, но как это реализовать, не знаю:
У меня есть кое-что, но как это реализовать, не знаю:
Дали подсказку: по идее, у WebBrowser должна быть структура
OLEINPLACEFRAMEINFO, в которой можно задать такой параметр, как
IOleInPlaceSite::GetWindowContext
Вот в нем, кажется можно задать свой обработчик клавиш или что-то вроде этого.
Подробностей человек не дал, а я сам не разобрался.
Вот нашел чего:
http://www.swissdelphicenter.ch/en/showcode.php?id=1055
Кажется, это то что нужно.. в примере перехватываются клавиши стрелок.
Edit
Не годится, там задается обработчик Application.OnMessage, которого в плагине - нету.
http://www.swissdelphicenter.ch/en/showcode.php?id=1055
Кажется, это то что нужно.. в примере перехватываются клавиши стрелок.
Edit
Не годится, там задается обработчик Application.OnMessage, которого в плагине - нету.
А так ли нужен этот обработчик? Если я правильно понял задачу - можно пойти по другому пути: поставить хук на нажатия клавиш, все обработчики написать самому на WinAPI. Т.е. отлавливать все нажатия внутри окна листера и проверять, какой именно контрол активен. Хук нужен будет локальный, что реализовать довольно просто.
Хотя я WLX-плаги не писал и с TWebBrowser не ковырялся - возможно там какие-то свои заморочки...
Хотя я WLX-плаги не писал и с TWebBrowser не ковырялся - возможно там какие-то свои заморочки...
В общем выяснилось, что хуку плевать на ActiveX, работает как угодно. Но, к моему величайшему позору, нормально работающий локальный хук мне поставить не удалось. Хук ставится согласно всем возможным мануалам, работает - но при переключении на любое окно, кроме моей программы тут же убивает его процесс.
Самое интересное - что раньше я это неоднократно делал и всё работало.
При переделке на глобальный хук - всё работает. В чём проблема - понять не могу.
Здесь небольшая программка, которая отлавливает нажатия клавиш и отслеживает все параметры, с этим связанные. Взять из неё участки кода для плагина труда не составит.
Самое интересное - что раньше я это неоднократно делал и всё работало.
При переделке на глобальный хук - всё работает. В чём проблема - понять не могу.
Здесь небольшая программка, которая отлавливает нажатия клавиш и отслеживает все параметры, с этим связанные. Взять из неё участки кода для плагина труда не составит.
Посмотрел, не очень понятно (пока). %)
Непонятно, какие участки кода в программе отвечают за хуки. И как надо переписать модуль Hook.pas примен-но к моему плагу... Если найдете время посмотреть на мой плаг, то исходник здесь:
http://wincmd.ru/plugring/OOSimpleViewer.html , в папке WLXViewer...
Непонятно, какие участки кода в программе отвечают за хуки. И как надо переписать модуль Hook.pas примен-но к моему плагу... Если найдете время посмотреть на мой плаг, то исходник здесь:
http://wincmd.ru/plugring/OOSimpleViewer.html , в папке WLXViewer...
Заранее спасибо!
Проверить на этой версии надо так: инсталлируем плагин в TC и открываем файл - если клавиши "1"-"8" в плагине работают, то все ОК.
Проверить на этой версии надо так: инсталлируем плагин в TC и открываем файл - если клавиши "1"-"8" в плагине работают, то все ОК.