Страница: 1 |
Ну, где же вы программисты???? В прошлый раз не помогли, помогите хоть в этот раз... Вот покопавшись в MSDN и разобравшись практически во всем, что накопал, налобал такую програмку, которая по-идеи должна реагировать на создание, удаление и активацию окон. Найдите недоработки В форму: Private Sub Form_Load() Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) В модуль: 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 Const HCBT_CREATEWND = 3 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
Знал бы что такое OSX, сказал бы! Ну если несложно подкинь!! Говоришь, что новичок, а такие проги бацаешь. Вообще-то я её ещё не смотрел - посмотрю днём, оффлайн. А пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки. Поэтому лучше тестировать прямо из экзешника. Так оно вернее будет и не придётся при каждом висюке Васю дёргать. Ты лучше напиши, что с этим кодом не так, чтоб мы знали, что искать-то. Говоришь, что новичок, а такие проги бацаешь. Вообще-то я её ещё не смотрел - посмотрю днём, оффлайн. А пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки. Поэтому лучше тестировать прямо из экзешника. Так оно вернее будет и не придётся при каждом висюке Васю дёргать. Ты лучше напиши, что с этим кодом не так, чтоб мы знали, что искать-то. cheto takoe delal, mogu poslat` esli najdu Для AASoft: свяжись со мной, твоя аська что-то не добавляется А пример пригодился бы. to Neco: ->Говоришь, что новичок, а такие проги бацаешь. Ну я просто в некоторых вопросах разбираюсь потихоньку, и вообще когда я записывался под этим именем я был новичком, не знал даже что такое hwnd и т п. -> пока скажу, что проги с хуком тяжело поддаются отладке и внутри самого хука лучше не ставить стоп-точки. Ну это ясно ты уж совсем меня за ламера считаешь Перед тем как программу писать я долго изучал предупреждения разных авторов! -> Ты лучше напиши, что с этим кодом не так Так дело в то что он просто не пашет хотя по-идеи должен! Вам повезло друг мой что я так быстро вычислил вашу ошибку hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, 0) Не знаю как вам, а мне лично не повезло, что CyRex такой шутник. Насчёт hInstance я тоже догадался (только не знал, что он называется - номер модуля), только вот я ещё прикреплял номер потока hThread (у CyRex'а - 0) и у меня прога тоже не работала, но не делала таких приколов как после того, как я заменил свой: hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, App.hInstance, App.ThreadID) на CyRex'овский. Раньше она "ловила" события только моего приложения - после тоже самое. Я сделал exe'шку, запустил и... все окна, ярлыки, таскбар исчезли (и из процессов тоже!), остались только Sumrize, DMaster и мой ДУ для винампа. Пришлось перезагружать комп! Если у кого-нибудь этот комп пашет напишите. Примечание: у меня XP (а у кого сейчас нет?) Без обид - просто наспех писал. В натуре подскажи в чём прикол-то? Почитай вот это Ещё на этом сайте есть про клавиатурный В чём прикол - не знаю. Чел попросил найти где у него ошибка и я нашёл. Сам с хуками никогда не работал. А вообще (см. первую ссылку) глобальный хук можно только из DLL вызывать. Страница: 1 |
Вопрос: Хук...
Добавлено: 03.11.03 16:45
Автор вопроса: NovichoK
ACount = 1
CCount = 1
DCount = 1
hHook = SetWindowsHookEx(WH_CBT, AddressOf CBTProc, 0, 0)
End Sub
Call UnhookWindowsHookEx(hHook)
End Sub
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_DESTROYWND = 4
Public Const HCBT_ACTIVATE = 5
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
Номер ответа: 3
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #3
Добавлено: 06.11.03 00:57
Номер ответа: 4
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #4
Добавлено: 06.11.03 00:57
Номер ответа: 5
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #5
Добавлено: 06.11.03 02:55
Номер ответа: 6
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #6
Добавлено: 06.11.03 03:14
Номер ответа: 7
Автор ответа:
NovichoK
Вопросов: 72
Ответов: 147
Профиль | | #7
Добавлено: 06.11.03 13:29
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 07.11.03 19:08
Вообще то иногда (а лучше всегда) нужно проверять что возвращает функция.
У вас она возвращает ноль. А по МСДН - это ошибка.
Там же(в MSDN) далее написано что для определения ошибки используй GetLastError.
Он вернул 1428.
Смотрим опять же в MSDN что такое 1428:
ERROR_HOOK_NEEDS_HMOD - Cannot set nonlocal hook without a module handle.
Это значит что глобальный хук требует номер модуля (он же hInstance) приложения.
Номер ответа: 9
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #9
Добавлено: 07.11.03 21:13
Номер ответа: 10
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #10
Добавлено: 07.11.03 22:08
За CyRex'а можно и черепок получить, ламо.
Номер ответа: 11
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #11
Добавлено: 07.11.03 22:49
Номер ответа: 12
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #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