Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Хук... Добавлено: 03.11.03 16:45  

Автор вопроса:  NovichoK

Ну, где же вы программисты????

В прошлый раз не помогли, помогите хоть в этот раз...

Вот покопавшись в MSDN и разобравшись практически во всем, что накопал, налобал такую програмку, которая по-идеи должна реагировать на создание, удаление и активацию окон.

Найдите недоработки

В форму:

Private Sub Form_Load()
ACount = 1
CCount = 1
DCount = 1
hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, 0, 0)
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Call UnhookWindowsHookEx(hHook)
End Sub

В модуль:

Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long

Public Const HCBT_CREATEWND = 3
Public Const HCBT_DESTROYWND = 4
Public Const HCBT_ACTIVATE = 5

Public Const WH_CBT = 5

Public CCount As Long, DCount As Long, ACount As Long

 

Public hHook As Long

Public Function CBTProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Select Case nCode

   Case HCBT_CREATEWND
      CCount = CCount + 1
      Form1.Text1.Text = "создано" + Str(CCount)
   Case HCBT_DESTROYWND
     DCount = DCount + 1
     Form1.Text2.Text = "Уничтожено" + Str(DCount)
  Case HCBT_ACTIVATE
     ACount = ACount + 1
     Form1.Text3.Text = "активировано" + Str(ACount)
End Select
  
CBTProc = CallNextHookEx(hHook, nCode, wParam, lParam)
End Function

Ответить

  Ответы Всего ответов: 12  

Номер ответа: 1
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #1 Добавлено: 03.11.03 22:21
Слушай, может тебе OCX для работы с окнами подойдёт? Или тебе надо имеено "реагировать" на изменения?

Ответить

Номер ответа: 2
Автор ответа:
 NovichoK



Вопросов: 72
Ответов: 147
 Профиль | | #2 Добавлено: 05.11.03 10:52

Знал бы что такое OSX, сказал бы!

Ну если несложно подкинь!!

Ответить

Номер ответа: 3
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #3
Добавлено: 06.11.03 00:57

Говоришь, что новичок, а такие проги бацаешь. :)

Вообще-то я её ещё не смотрел - посмотрю днём, оффлайн. А пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки. Поэтому лучше тестировать прямо из экзешника. Так оно вернее будет и не придётся при каждом висюке Васю дёргать. Ты лучше напиши, что с этим кодом не так, чтоб мы знали, что искать-то.

Ответить

Номер ответа: 4
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #4
Добавлено: 06.11.03 00:57

Говоришь, что новичок, а такие проги бацаешь. :)

Вообще-то я её ещё не смотрел - посмотрю днём, оффлайн. А пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки. Поэтому лучше тестировать прямо из экзешника. Так оно вернее будет и не придётся при каждом висюке Васю дёргать. Ты лучше напиши, что с этим кодом не так, чтоб мы знали, что искать-то.

Ответить

Номер ответа: 5
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #5 Добавлено: 06.11.03 02:55

cheto takoe delal, mogu poslat` esli najdu;)

Ответить

Номер ответа: 6
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #6
Добавлено: 06.11.03 03:14

Для AASoft: свяжись со мной, твоя аська что-то не добавляется

А пример пригодился бы.

Ответить

Номер ответа: 7
Автор ответа:
 NovichoK



Вопросов: 72
Ответов: 147
 Профиль | | #7 Добавлено: 06.11.03 13:29

to Neco:

->Говоришь, что новичок, а такие проги бацаешь. :)

Ну я просто в некоторых вопросах разбираюсь потихоньку, и вообще когда я записывался под этим именем я был новичком, не знал даже что такое hwnd и т п.

-> пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки.

Ну это ясно ты уж совсем меня за ламера считаешь Перед тем как программу писать я долго изучал предупреждения разных авторов!

-> Ты лучше напиши, что с этим кодом не так

Так дело в то что он просто не пашет хотя по-идеи должен!

 

Ответить

Номер ответа: 8
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #8
Добавлено: 07.11.03 19:08

Вам повезло друг мой что я так быстро вычислил вашу ошибку :)
Вообще то иногда (а лучше всегда) нужно проверять что возвращает функция.
У вас она возвращает ноль. А по МСДН - это ошибка.
Там же(в MSDN) далее написано что для определения ошибки используй GetLastError.
Он вернул 1428.
Смотрим опять же в MSDN что такое 1428:
ERROR_HOOK_NEEDS_HMOD - Cannot set nonlocal hook without a module handle.
Это значит что глобальный хук требует номер модуля (он же hInstance) приложения.

hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, 0)

Ответить

Номер ответа: 9
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #9
Добавлено: 07.11.03 21:13

Не знаю как вам, а мне лично не повезло, что CyRex такой шутник. Насчёт hInstance я тоже догадался (только не знал, что он называется - номер модуля), только вот я ещё прикреплял номер потока hThread (у CyRex'а - 0) и у меня прога тоже не работала, но не делала таких приколов как после того, как я заменил

свой:

hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, App.ThreadID)

на CyRex'овский. Раньше она "ловила" события только моего приложения - после тоже самое. Я сделал exe'шку, запустил и... все окна, ярлыки, таскбар исчезли (и из процессов тоже!), остались только Sumrize, DMaster и мой ДУ для винампа. Пришлось перезагружать комп! Если у кого-нибудь этот комп пашет напишите.

Примечание: у меня XP (а у кого сейчас нет?)

Ответить

Номер ответа: 10
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #10
Добавлено: 07.11.03 22:08
За CyRex'а можно и черепок получить, ламо.

Ответить

Номер ответа: 11
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #11
Добавлено: 07.11.03 22:49

Без обид - просто наспех писал. В натуре подскажи в чём прикол-то?

Ответить

Номер ответа: 12
Автор ответа:
 CyRax



Разработчик Offline Client

ICQ: 204447456 

Вопросов: 180
Ответов: 4229
 Web-сайт: basicproduction.nm.ru
 Профиль | | #12
Добавлено: 07.11.03 22:59

Почитай вот это
http://pascal.sources.ru/cgi-bin/forum/YaBB.cgi?board=cpp;action=display;num=1016610435

Ещё на этом сайте есть про клавиатурный
http://www.vbnet.ru/faq/showtopic.asp?id=159

 

В чём прикол - не знаю. Чел попросил найти где у него ошибка и я нашёл. Сам с хуками никогда не работал. А вообще (см. первую ссылку) глобальный хук можно только из DLL вызывать.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам