Goggy Posted May 16, 2006 Posted May 16, 2006 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 Quote
progload Posted June 6, 2006 Posted June 6, 2006 lpram is passed ByVal not ByRef and needs to be marshaled. Here is an example: How to set a hook in Visual Basic .NET http://support.microsoft.com/?scid=kb;en-us;319524&spid=8291&sid=89 Hope that helps. Quote
Recommended Posts