Страница: 1 |
Вопрос: Хук мыши
Добавлено: 05.12.09 23:40
Автор вопроса: Winand | Web-сайт: winandfx.narod.ru
Делаю хук через WH_MOUSE_LL, когда программа делает что-то длительное, например подключение к интернет-потоку, то процедура обработки хука естессно не может обрабатывать системные сообщения и мыша не двигается)
В связи с этим два вопроса возникают. Можно ли сделать хук лишенный такого недостатка? можно ли получать узнавать о кручении колеса мыши без хука?
Ответить
Номер ответа: 1Автор ответа: AWP
ICQ: 345685652 Вопросов: 96Ответов: 1212
Web-сайт: xawp.narod.ru Профиль | | #1
Добавлено: 06.12.09 00:04
Я кручение делал так, вроде не глючило.
Option Explicit
Private Declare Function CallWindowProcA Lib "user32" (ByVal lpPrevWndFunc As Long , ByVal hwnd As Long , ByVal MSG As Long , ByVal wParam As Long , ByVal lParam As Long ) As Long
Private Declare Function SetWindowLongA Lib "user32" (ByVal hwnd As Long , ByVal nIndex As Long , ByVal dwNewLong As Long ) As Long
Private Declare Function SetWindowTextA Lib "user32" (ByVal hwnd As Long , ByVal lpString As String ) As Long
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long ) As Integer
Private Const GWL_WNDPROC = -4
Private Const WM_MOUSEWHEEL = &H20A
Private lpPrevWndProc As Long , Wheel As Integer
Sub Hook(hwnd As Long )
lpPrevWndProc = SetWindowLongA(hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Sub UnHook(hwnd As Long )
Call SetWindowLongA(hwnd, GWL_WNDPROC, lpPrevWndProc)
End Sub
Function WindowProc(ByVal hwnd As Long , ByVal uMsg As Long , ByVal wParam As Long , ByVal lParam As Long ) As Long
On Error GoTo xErr
If uMsg = WM_MOUSEWHEEL Then
If wParam = -7864320 Or wParam = -23592960 Or wParam = -15728640 Then Wheel = -1
If wParam = 7864320 Or wParam = 23592960 Or wParam = 15728640 Then Wheel = 1
Else
WindowProc = CallWindowProcA(lpPrevWndProc, hwnd, uMsg, wParam, lParam)
End If
xErr:
End Function
Ответить
Страница: 1 |
Поиск по форуму