Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 | 2 | 3 |

 

  Вопрос: Как перехватить события мыши? Добавлено: 15.06.07 20:01  

Автор вопроса:  Иван | Web-сайт: www.harami.ru

Ответить

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

Номер ответа: 16
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #16 Добавлено: 22.06.07 10:51
to HACKER
1.я был почему-то уверен, что ты это знаешь, вот этот цикл

Do
    Call GetMessage(msss, 0, 0, 0)
    Call TranslateMessage(msss)
    Call DispatchMessage(msss)
Loop

он может быть в видоизменноной форме с поддержкой акселераторов,и прочих вставок, написанный на разных языках -но он есть основа любого WINDOWS приложения. То что VB скрывает в недрах этот цикл - правильно - нефиг лезть куда не надо.
Но, иными словами, если нет нужны в глобальном хуке, и надоело при ошибке валить IDE, и на скорую руку надо проверить uMsg, wParam,lParam),то огранизация такого цикла будет хорошим подспорьем.
2. Хуки написанные не в DLL работают капризно.

2. Насчет SeProp: При саблкассинге какого-то элемента обычно записывают адрес предыдущей процедуры в SetWindowLong(hwnd, GWL_USERDATA,(WNDPROC)prevproc), уверенные в своей безнаказанности. Причем поле GWL_USERDATA вовсе не предназначено для хранения именно WNDPROC.
Такой-же чайник из MS мог там уже написать телефон своей бабушки. Чтобы не спорить со старшими я использовал SetProp (hwnd, "GRANDMOTHER", mynewproc).
Все банально.



Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #17 Добавлено: 22.06.07 20:34
Ну с 1 - я не спорю, раздул я как раз по второму вопросу, просто никогда невидел в GWL_USERDATA бабушкиных телефонов. От этого и возникает вопрос зачем здесь использовалось SetProp. Вообщем небуду и я спорить со старшими, может действительно GWL_USERDATA предназначено для хранения бабушкиных телефонов..

Ответить

Номер ответа: 18
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #18 Добавлено: 23.06.07 01:22
Sub main()
Dim cmbinf As COMBOBOXINFO
cmbinf.cbSize = LenB(cmbinf)
Call GetComboBoxInfo(Form1.Combo1.hwnd, cmbinf)
Debug.Print GetWindowLong(cmbinf.hwndItem, GWL_USERDATA) 'повоните родтителям
End Sub

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #19 Добавлено: 23.06.07 22:27
хм гы :))) Внатуре телефон бабушки :))

Ок, а для чего эти данные могут быть нужны? Интересно просто )

Ответить

Номер ответа: 20
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #20
Добавлено: 24.06.07 00:49
Аж заинтриговали, но VB6 не установлен, что там? Что там было до? Что в COMBOBOXINFO?

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #21 Добавлено: 24.06.07 01:40
Ну х.з. число какое-то. Обычно при сабклассинге все его переписывали незадумываясь, а тут EUGY предложил что старые данные могли быть для чего-то нужны :)

Ответить

Номер ответа: 22
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #22 Добавлено: 24.06.07 01:41
 Вот после того как я потратил 3 часа на бесплодные поиски, и обнаружив еще несколько подобных контролов,с тех пор в сабклассинге я больше не использую GWL_USERDATA. А только SetProp.

Ответить

Номер ответа: 23
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #23
Добавлено: 24.06.07 18:09
Действительно, MFC тоже использует SetProp вместо GWL_USERDATA для сохранения адреса оконной процедуры.

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #24 Добавлено: 24.06.07 19:31
Интересно, а в многих статьях по сабклассингу аффтары используют именно GWL_USERDATA, и никто даже не намекает на SetProp, ну что ж, теперь и я буду просвященный, пасиб EUGY.

Ответить

Номер ответа: 25
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #25
Добавлено: 24.06.07 21:46
Стопудово, это диверсия MS

Ответить

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


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #26 Добавлено: 25.06.07 00:19
:\ Дык если студию перезапустить это значение меняется, если прога скомпилена - меняется при каждом её запуске...

Ответить

Номер ответа: 27
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #27 Добавлено: 25.06.07 03:11
кривое поведение только в VB6, вот только что проверил на С++, все как в аптеке.
Так что, однозначно - диверсия.

Ответить

Номер ответа: 28
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #28
Добавлено: 25.06.07 16:35
Возможно, кишки VB6 используют GWL_USERDATA для своих темных целей. Если его бесконтрольно менять, что-нибудь падает?

Ответить

Номер ответа: 29
Автор ответа:
 EUGY



Вопросов: 0
Ответов: 454
 Профиль | | #29 Добавлено: 25.06.07 21:04
Да, даже без попытки сабклассинга:

Option Explicit

Private Sub Command1_Click()
    Dim cbinf As COMBOBOXINFO
    Dim hwndEdit As Long
    cbinf.cbSize = LenB(cbinf)
    Call GetComboBoxInfo(Combo1.hwnd, cbinf)
    hwndEdit = cbinf.hwndItem
    Call SetWindowLong(hwndEdit, GWL_USERDATA, 1234567)
End Sub

Проект вылетает сходу.

Ответить

Номер ответа: 30
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #30
Добавлено: 25.06.07 23:04
С какой ошибкой?

Ответить

Страница: 1 | 2 | 3 |

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



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