Хук на IE

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Хук на IE

Сообщение Odrick » 16.10.2005 (Вс) 2:37

Тема избита, но что-то не выходит... В общем нужно поставить хук на клик в определенном окне IE. Если быть точным, то в Internet Explorer_Server, что не суть важно в принципе. Нужно для написания плагина. Делаю так:

При загрузке формы:
Код: Выделить всё

    IEWindowHwnd = GetForegroundWindow()
    SetParent Me.hWnd, IEWindowHwnd
    hInstance = GetWindowLong(IEWindowHwnd, GWL_HINSTANCE)
    hThreadId = GetWindowThreadProcessId(IEWindowHwnd, 0)
    hHook = SetWindowsHookEx(WH_CALLWNDPROC, AddressOf TestHook, hInstance, hThreadId)


Сам обработчик:
Код: Выделить всё

Public Function TestHook(ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    If uMsg = WM_LBUTTONDOWN Then
        MsgBox "Click!!!"
    End If
End Function


По выходу:
Код: Выделить всё

UnhookWindowsHookEx hHook


В результате - ничего не происходит... Что я делаю не так? Что провтыкал?
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.10.2005 (Вс) 2:52

Э... дык это...
Не надо так делать :)

Но если очень хочется, см. пример Тёмыча по расширению часов в трее.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Хук на IE

Сообщение tyomitch » 16.10.2005 (Вс) 3:51

Odrick писал(а):В результате - ничего не происходит... Что я делаю не так? Что провтыкал?

Обработчик хука должен быть в DLL, говорит MSDN.
У тебя он в DLL? ;-)
Изображение

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 16.10.2005 (Вс) 14:16

Плохо... Очень плохо... GSerg, а с помощью твоего линкера нельзя такую dll сделать? Нужно всего-то узнать координаты клика в окне с известным хендлом и блокировать его. Кроме хуков никак?
То, что для одних константа, для других только переменная...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.10.2005 (Вс) 14:17

Odrick, GSerg тебе правильно говорит - найди мою расширялку часов ;-)
Изображение

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.10.2005 (Вс) 15:20

Но прежде чем искать, проверь, не поможет ли тебе IE Spy и его, в частности, возможность отлавливать и блокировать клики по ссылкам в эксплорерах :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 16.10.2005 (Вс) 23:44

Да в общем-то идея простая до безобразия и вместе с тем часто очень нужная - сделать плагин, который по клику в любом месте IE показывл ID, NAME, InnerHtml и т.д. элемента, на котором кликнули. Это уже реализовано, но... В виде окна с встроенным Internet Control. А сделать полноценный плагин не получается... По поводу расширялки часов - буду разбираться, но уже тот факт, что dll-ка отказалась подключаться без ее предварительной регистрации не вдохновляет. Ладно, буду разбираться...
То, что для одних константа, для других только переменная...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 16.10.2005 (Вс) 23:53

Odrick, емнип плагины, чтобы IE их увидел, всё равно надо регистрировать, т.ч. ты ничего не потерял ;-)
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 17.10.2005 (Пн) 9:05

Odrick, не городи огород с хуками. Скачай пример отсюда:
http://bbs.vbstreets.ru/viewtopic.php?t=20022
В нем показано, как получить доступ к любому окну эксплорера. Из него можно получить ссылку на HTMLDocument этого окна, поставить на него обработчик желаемого тобой события и вытаскивать элемент из window.event.srcelement
Лучший способ понять что-то самому — объяснить это другому.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 17.10.2005 (Пн) 12:21

2tyomitch - согласен.
2Antonariy - спасибо за ссылку. сейчас буду читать ;)
То, что для одних константа, для других только переменная...

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 17.10.2005 (Пн) 14:26

Гм... Да, похоже что это именно то, что мне нужно :D Но... Опять это Но :) В общем не ловятся события мыши на некоторых фреймах. Странно как-то. Однако, уже есть куда рыть. Antonariy - спасибо.
То, что для одних константа, для других только переменная...

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 17.10.2005 (Пн) 14:47

В общем не ловятся события мыши на некоторых фреймах.

У каждого фрейма свой HTMLDocument, соответственно обработчик нужен каждому.
Лучший способ понять что-то самому — объяснить это другому.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 17.10.2005 (Пн) 17:05

Это понятно. Однако. Есть приложение, каждая страница которого состоит из 3-х феймов. В первых 2-х нормально ловится Click. А в третьем - тишина. Вот я и говорю, что странно это. Кроме того, нужно сделать универсальный обработчик, которому пофигу сколько фреймов на странице...
То, что для одних константа, для других только переменная...

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 17.10.2005 (Пн) 18:53

Может кто знает, как отследить Click глобально для всей html-страницы? Этого будет достаточно... Далее узнать в каком именно фрейме и на чем именно кликнули уже не проблема. Главное перехватить само событие. Да, и по возможности блокировать его ;)
То, что для одних константа, для других только переменная...

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 17.10.2005 (Пн) 19:17

Может кто-нибудь подкинет ссылку, той популярной расширялки часов в трее, а то что-то не найду...
Бумага - друг программиста.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 17.10.2005 (Пн) 19:25

В поиск. tray clock. Искать все слова.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 17.10.2005 (Пн) 19:41

Amed писал(а):В поиск. tray clock. Искать все слова.


Не помогает...
Бумага - друг программиста.

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 17.10.2005 (Пн) 19:43

DNA critical error? Try rebooting...

http://bbs.vbstreets.ru/viewtopic.php?t ... tray+clock

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.10.2005 (Пн) 19:49

Amed писал(а):DNA critical error? Try rebooting...

http://bbs.vbstreets.ru/viewtopic.php?t ... tray+clock

Это не оно.
Оно: http://bbs.vbstreets.ru/viewtopic.php?p=119512#119512
Изображение

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 17.10.2005 (Пн) 20:55

А ещё вот что хотел спросить, а что должно стать с часиками?
Бумага - друг программиста.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.10.2005 (Пн) 23:06

Должны расшириться.
Если у тебя WinXP, то для этого нужно нажать на шеврон (стрелку влево) в левом краю трея.
В любом случае помогает изменение размера таскбара.
Изображение

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 17.10.2005 (Пн) 23:08

Тогда вопрос такой, а можно туда (в трей к часикам) текст, который нужно? :wink:
Бумага - друг программиста.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.10.2005 (Пн) 23:48

Можно даже свою картинку: см. http://vbrussian.com/Examples.asp?ID=102
Изображение

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 18.10.2005 (Вт) 1:06

Прикольно :) Топик перешел на другую тему :D Повторюсь еще раз:

Может кто знает, как отследить Click глобально для всей html-страницы?
То, что для одних константа, для других только переменная...

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 18.10.2005 (Вт) 9:33

tyomitch писал(а):Можно даже свою картинку: см. http://vbrussian.com/Examples.asp?ID=102


Я новерное что-то не так делаю... но:
Вложения
1.rar
Или я чего-тот не понимаю...
(116 Кб) Скачиваний: 35
2.rar
Или вот ещё...
(77.02 Кб) Скачиваний: 37
Бумага - друг программиста.

Джеффи
Бывалый
Бывалый
 
Сообщения: 256
Зарегистрирован: 06.03.2005 (Вс) 0:26

Сообщение Джеффи » 18.10.2005 (Вт) 9:43

Odrick писал(а):Прикольно :) Топик перешел на другую тему :D Повторюсь еще раз:

Может кто знает, как отследить Click глобально для всей html-страницы?


Ничего и твою тему разберём )
Бумага - друг программиста.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.10.2005 (Вт) 9:45

Это понятно. Однако. Есть приложение, каждая страница которого состоит из 3-х феймов. В первых 2-х нормально ловится Click. А в третьем - тишина. Вот я и говорю, что странно это. Кроме того, нужно сделать универсальный обработчик, которому пофигу сколько фреймов на странице...


Это все зависит от структуры фремов. Есть еще такие понятия как FRAMESET и IFRAME. Досконально в нюансах их поведения я не разбирался, однако очевидно, что в твоем случае нужно рекурсивно пробежаться по всем фреймам и их документам и поставить обработчик на каждый документ.

Или попробуй поставить обработчик на главный фрейм.
Лучший способ понять что-то самому — объяснить это другому.

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 18.10.2005 (Вт) 12:04

Это все зависит от структуры фремов. Есть еще такие понятия как FRAMESET и IFRAME.

Это я и так прекрасно знаю ;) Благо не первый год занимаюсь разработкой сайтов.

однако очевидно, что в твоем случае нужно рекурсивно пробежаться по всем фреймам и их документам и поставить обработчик на каждый документ.

Да вот именно так и делаю... Но как-то оно рогато - куча одинаковых обработчиков просто из-за большого количества фреймов. Например то приложение, которое разрабатывает наша контора, на одной странице может содержать до 40 фреймов. IFRAME, есстессно... А инфа вытягивается одной функцийкой, пофигу в каком фрейме кликнули. Вот я и говорю - просто сам факт клика бы мне словить, а дальше не уже не проблема ;)
То, что для одних константа, для других только переменная...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 18.10.2005 (Вт) 12:40

А ты один и тот же обработчик всем фреймам воткни...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Odrick
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 503
Зарегистрирован: 28.09.2003 (Вс) 2:04

Сообщение Odrick » 18.10.2005 (Вт) 13:04

А ты один и тот же обработчик всем фреймам воткни...

Да что-то не выходит...
М-м-м. Можно все просто и красиво решить - только что пришла мысля в голову :) Только опять загвоздка :) Не получается что-то перебрать все фреймы:

Код: Выделить всё
Dim IEWin as SHDocVw.InternetExplorer


Код: Выделить всё
For nI = 0 To IEWin.document.frames().length-1
    бла-бла-бла = IEWin.document.frames(nI).document
Next nI

IEWin.document.frames(nI).document ничего не возвращает. Однако IEWin.document.frames(0).document и т.д. работает нормально... :cry:

Код: Выделить всё
Dim IEFrame as MSHTML.HTMLWindow2

For Each IEFrame In IEWin.document.frames
        бла-бла-бла = IEFrame.document
Next

тот же эффект - IEFrame не получает значения...

Так как же перебрать все фреймы на странице?[/code]
То, что для одних константа, для других только переменная...

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8

    TopList