Помогите с правильным написанием и обработкой хуков

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

Помогите с правильным написанием и обработкой хуков

Сообщение Pantalone » 07.09.2006 (Чт) 0:14

Ребят, киньте ссылку на сабж пожалуйста. При хуках у меня иногда ни с того ни с сего прога валится когда запущена из под IDE, в скомпилированном виде это не очень часто бывает, но это потому что большинство времени в IDE сижу.
Прога валится причем когда вообще ее никто не трогает, просто вот она была и бац - захрустел винт, запахал доктор ватсон и привет.

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

Сообщение tyomitch » 07.09.2006 (Чт) 5:36

Под "хуками", надо полагать, понимается сабклассинг?
В топике в кирпичах, где сабклассер GSerg-а, я свалил ссылки на разные материалы по этому поводу.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 13:36

А в чем великий смысл этого сабклассера в кирпичах? Я пока не очень в теме, просто кратко поясните, он меньше ошибок вызывает или что?

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 13.09.2006 (Ср) 13:46

Смысл сабклассера в том что он есть, и есть он рабочий.
Ошибок вызывает меньше по сравнению с чем?
Весь мир матрица, а мы в нем потоки байтов!

shady
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 09.11.2005 (Ср) 11:03

Сообщение shady » 13.09.2006 (Ср) 13:52

А в чем великий смысл этого сабклассера в кирпичах? Я пока не очень в теме, просто кратко поясните, он меньше ошибок вызывает или что?

его просто нужно скачать и посмотреть

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 15:31

Что-то не пойму как его пристроить.
Пытаюсь вставить код в функцию Callback, что в ISubclass, так до нее вообще действие не доходит. Оно туда вообще должно приходить?

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

Сообщение tyomitch » 13.09.2006 (Ср) 15:37

Pantalone, там ведь специально для тебя пример приложен? В него посмотреть не дано?
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 15:42

tyomitch
В том примере функция пустая:

Код: Выделить всё
Public Function Callback(ByVal hWnd As Long, ByRef uMsg As Long, ByRef wParam As Long, ByRef lParam As Long, ByVal PrevProc As Long) As Long
End Function


Сюда что ли писать надо:
ISubclass_Callback?
Зачем тогда пустая Callback объявлена?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2006 (Ср) 15:49

Потому что так надо.
Если не понимаешь, как это действует, не надо менять, используй так, как в примере указано.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение Antonariy » 13.09.2006 (Ср) 16:14

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

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 16:22

Ясно, и даже заработало и похоже стабильно.
А тогда такой вопросец, если нужно использовать сабклассинг для нескольких форм как тут поступить?
В каждой форме писать свои
Implements ISubclass
и
ISubclass_Callback
или можно как-то все это хозяйство сделать общим? И разруливать через hwnd форм.

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

Сообщение tyomitch » 13.09.2006 (Ср) 17:18

Можно сделать общим.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 17:25

А намекнуть хотя бы можно как?
Попробую в свой класс все запихнуть.

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

Сообщение tyomitch » 13.09.2006 (Ср) 17:59

Намёк: у AddSubclassHook есть параметр MessageProcessor.
Изображение

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 20:08

Хотел всю обработку в один MessageProcessor поместить, который в классе описан. Ан нет, встает проблема определения от какого именно окна сообщение поступило. Можно пройтись кейсами по Form1.hwnd и тд, но если форма не открыта то будет ошибка.
On Error Resume Next использовать не хорошо, что посоветуете?
Или лучше не делать обработку сообщений от нескольких окон в одном обработчике?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2006 (Ср) 20:53

Добавляй сабклассируемые окна в коллекцию, где Item=Form, а Key=CStr(Form.hWnd).
Но лучше не смешивай.
Lasciate ogni speranza, voi ch'entrate.

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

Сообщение tyomitch » 13.09.2006 (Ср) 21:05

alibek-а не смущает, что это даёт всем формам бессмертие?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.09.2006 (Ср) 21:13

Хм... А почему?
При снятии хука, естественно, элемент из коллекции удаляется.
Lasciate ogni speranza, voi ch'entrate.

Pantalone
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 687
Зарегистрирован: 12.11.2005 (Сб) 16:46
Откуда: Сапог

Сообщение Pantalone » 13.09.2006 (Ср) 21:33

Запихнул все в один класс, и для каждой формы вызываю отдельный экземпляр. Удобно! Жду первого краша.


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

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

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

    TopList