Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

According to msdn...(if i read it rite..)... the MOUSEHOOKSTRUCT should return the handle of the window thats recieving the message....

well it doesnt seem to return anything....

could someone shine some light on this for me?

Thank u all 4 your help.

Imports System.Runtime.InteropServices
Imports System.Reflection
Imports System.Drawing
Imports System.Threading
Imports System.String

Public Class LLMouse

#Region "Api Declarations"
   '---------------------------------------------------------------------------
   'A VB.6 long converts to a VB.net integer
   '---------------------------------------------------------------------------
   Private Declare Function UnhookWindowsHookEx Lib "user32" _
                     (ByVal hHook As Integer) As Integer

   Private Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" ( _
                       ByVal idHook As Integer, _
                       ByVal lpfn As MouseHookDelegate, _
                       ByVal hmod As Integer, _
                       ByVal dwThreadId As Integer) As Integer

   Private Declare Function CallNextHookEx Lib "user32" _
                       (ByVal hHook As Integer, _
                       ByVal nCode As Integer, _
                       ByVal wParam As Integer, _
                       ByVal lParam As MOUSEHOOKSTRUCTEX) As Integer

   Private Declare Function GetFocus Lib "user32" Alias "GetFocus" () As Integer

   Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
                       ByVal hwnd As Integer, _
                       ByVal lpString As String, _
                       ByVal cch As Long) As Integer

   Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" ( _
                       ByVal xPoint As Integer, _
                       ByVal yPoint As Integer) As Integer

   Private Declare Function FlashWindow Lib "user32" Alias "FlashWindow" ( _
                       ByVal hwnd As Integer, _
                       ByVal bInvert As Integer) _
                       As Integer
#End Region

#Region "Mouse Structure"

   Public Structure MOUSEHOOKSTRUCT
       Public POINT As POINT
       Public hwnd As Integer
       Public wHitTestCode As Integer
       Public dwExtraInfo As Integer
   End Structure
   Public Structure MOUSEHOOKSTRUCTEX
       Public MOUSEHOOKSTRUCT As MOUSEHOOKSTRUCT
       Public mouseData As Integer
   End Structure

#End Region

#Region "Mouse Constants"

   Private Const HC_ACTION = 0

   Private Const WM_MOUSEACTIVATE = &H21
   private Const WM_MOUSEFIRST = &H200
   Private Const WM_LBUTTONDOWN = &H201
   Private Const WM_LBUTTONUP = &H202
   Private Const WM_LBUTTONDBLCLK = &H203

   Private Const WH_MOUSE_LL = 14&

#End Region

   Private MouseHandle As Integer

   Public Delegate Function MouseHookDelegate( _
                           ByVal Code As Integer, _
                           ByVal wParam As Integer, _
                           ByRef lParam As MOUSEHOOKSTRUCTEX) _
                           As Integer

   <MarshalAs(UnmanagedType.FunctionPtr)> _
   Private callback As MouseHookDelegate

   Public Sub HookMouse()
       callback = New MouseHookDelegate(AddressOf MouseCallback)

       MouseHandle = SetWindowsHookEx( _
                       WH_MOUSE_LL, _
                       callback, _
                       Marshal.GetHINSTANCE([Assembly].GetExecutingAssembly.GetModules()(0)).ToInt32, _
                       0)
   End Sub

   Public Function MouseCallback( _
                       ByVal Code As Integer, _
                       ByVal wParam As Integer, _
                       ByRef lParam As MOUSEHOOKSTRUCTEX) As Integer

       If (Code = HC_ACTION) Then

           Select Case wParam
               Case Else
                   Dim Window_Name As String
                   Window_Name = Space(32)

                   GetWindowText( _
                       WindowFromPoint( _
                               lParam.MOUSEHOOKSTRUCT.POINT.X, _
                               lParam.MOUSEHOOKSTRUCT.POINT.Y), _
                       Window_Name, _
                       Window_Name.Length)

                   Window_Name = Left(Window_Name, InStr(Window_Name, Chr(0), CompareMethod.Binary) - 1)
                   If Window_Name.Length <> 0 Then
                       Debug.Write(Hex(wParam) & vbCrLf)
                       Debug.Write(Window_Name.Length & vbCrLf)
                       Debug.Write(Window_Name & vbCrLf)
                       Debug.Write(lParam.MOUSEHOOKSTRUCT.hwnd & vbCrLf)
                       Debug.Write(lParam.mouseData.ToString & vbCrLf)
                   End If
                   If lParam.MOUSEHOOKSTRUCT.hwnd <> 0 Then FlashWindow(lParam.MOUSEHOOKSTRUCT.hwnd, True)
           End Select

       End If


       Return CallNextHookEx( _
                       MouseHandle, _
                       Code, _
                       wParam, _
                       lParam)

   End Function

   Public Sub UnhookMouse()

       Call UnhookWindowsHookEx(MouseHandle)

   End Sub
End Class

  • 3 weeks later...
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...