Вопрос избитый, но всё же: отлов mouse wheel

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

Вопрос избитый, но всё же: отлов mouse wheel

Сообщение Tarik » 04.01.2005 (Вт) 15:43

Всем доброго времни суток! Вопрос уже довольно избитый, однако вразумительного ответа я на него так и не нашёл :-(. Дело в том, что я пытаюсь отлавливать движения колеса мыши через JournalHook (как известно, глобальный хук на мышь из VB не поставишь). Юзаю немного доработанный класс от в. и у. Оловянникова. Так вот, само сообщение WM_MOUSEWHEEL отлавливается, но как узнать zDelta, то есть куда сдвинулось колесо - вверх или вниз? При установке глобального хука на мышь это можно узнать из wParam (это меня сишники научили :oops: ), но в JournalRecordProc в wparam передаётся всегда 0 :( Отсюда закономерный и, увы, типичный для нашей страны вопрос: что делать?
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

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

Сообщение GSerg » 04.01.2005 (Вт) 15:46

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

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 04.01.2005 (Вт) 15:50

Кхм... Я, конечно, понимаю - какой вопрос, такой и ответ... Но всё-таки хотелось бы подробнее :wink:
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

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

Сообщение GSerg » 04.01.2005 (Вт) 15:51

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

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 04.01.2005 (Вт) 15:56

Native DLL на VB? Я знаю, можно, конечно... А через JournalHook всё-таки нельзя извратиться?

"Хорёчек?..." (с) "Ангелы Чарли 2" :-)
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.01.2005 (Вт) 20:11

Хм... :roll: Где-то у меня валялся пример проще... Ага!
Код: Выделить всё
Option Explicit

Private Const PM_REMOVE = &H1
Private Const WM_MOUSEWHEEL = 522

Private Type POINTAPI
    x As Long
    y As Long
    End Type

Private Type Msg
    hWnd As Long
    Message As Long
    wParam As Long
    lParam As Long
    time As Long
    pt As POINTAPI
    End Type

Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long

Private bCancel As Boolean

Private Sub ProcessMessages()
Dim Message As Msg
Do While Not bCancel
WaitMessage
If PeekMessage(Message, Me.hWnd, WM_MOUSEWHEEL, WM_MOUSEWHEEL, PM_REMOVE) Then 'если колесо потрогали, то...
If Message.wParam < 0 Then 'скролл вверх
Me.Top = Me.Top + 240
Else 'скролл вниз
Me.Top = Me.Top - 240
End If
End If
DoEvents
Loop
End Sub

Private Sub Form_Load()
Me.Show
ProcessMessages
End Sub

Private Sub Form_Unload(Cancel As Integer)
bCancel = True
End Sub
Не пойдет? :roll:

Tarik
Агент Системы
Агент Системы
Аватара пользователя
 
Сообщения: 1222
Зарегистрирован: 03.01.2003 (Пт) 16:05
Откуда: Москва

Сообщение Tarik » 04.01.2005 (Вт) 20:21

A.A.Z., спасибо за желание помочь, но это действует только в пределах своего потока и только когда форма активна :( Мне же нужно отлавливать глобально. Эх, придётся, наверное, на .net писать...
Изображение

Ever tried? Ever failed? No matter. Try again! Fail again! Fail better!

A.A.Z.
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3035
Зарегистрирован: 30.06.2003 (Пн) 13:38

Сообщение A.A.Z. » 04.01.2005 (Вт) 20:24

А, ясно... :(


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

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

Сейчас этот форум просматривают: Yandex-бот и гости: 9

    TopList