|
web
newsgroups
|
|||||||||||||||||||||||
|
|||||||||||||||||||||||
Capturing mouse events (Mouse up and down on the desktop)Hi,
I am trying to capture the mouse events when the user clicks on the desktop not the winform. I looked at the mouse_event function but MSDN documentation says that it is suppressed in win NT/2000/XP. What I am trying to do is to get print screen for a section on the desktop every number of seconds. And I want the user to be able to select that region. Any help will be appreciated. if you want to get a mouseclick event, just hook the mouse so it will tell
you whenever the mouse button is clicked -- -iwdu15 That's true when you click on the form. But if you click outside the
form the even doesn't capture mouse events. iwdu15 wrote: Show quoteHide quote > if you want to get a mouseclick event, just hook the mouse so it will tell > you whenever the mouse button is clicked > -- > -iwdu15 sorry for not being clear, i meant put a mouse hook on the formload event.
then you can receive every mouse click....ex: Private Const HC_ACTION As Integer = 0 Private Const WH_MOUSE_LL As Integer = 14 Private Const WM_LBUTTONDOWN As Integer = &H201 Private Const WM_MOUSEWHEEL As Integer = &H20A Private Declare Function SetWindowsHookEx Lib "user32" _ Alias "SetWindowsHookExA" ( _ ByVal idHook As Integer, _ ByVal lpfn As LowLevelMouseProcDelegate, _ 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 MSLLHOOKSTRUCT) As Integer Private Declare Function UnhookWindowsHookEx Lib "user32" ( _ ByVal hHook As Integer) As Integer Private Function LowLevelMouseProc( _ ByVal nCode As Integer, _ ByVal wParam As Integer, _ ByVal lParam As MSLLHOOKSTRUCT) As Integer If (nCode = HC_ACTION) Then If wParam = WM_LBUTTONDOWN Then ''do something on left mouse click End If Return CallNextHookEx(hhkLowLevelMouse, _ nCode, wParam, lParam) End If End Function Private Delegate Function LowLevelMouseProcDelegate( _ ByVal nCode As Integer, _ ByVal wParam As Integer, _ ByVal lParam As MSLLHOOKSTRUCT) As Integer ''set mouse hook Public Sub DisableMouse() 'Set Mouse Hook hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, _ AddressOf LowLevelMouseProc, _ Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, _ 0) End Sub ''release hook Public Sub EnableMouse() 'Release Mouse Hook UnhookWindowsHookEx(hhkLowLevelMouse) End Sub hope this helps -- -iwdu15 Thanks alot. I think that almost did that trick except it is generating
an exception when reaching line: Return CallNextHookEx(hhkLowLevelMouse, _ nCode, wParam, lParam) That exception was about Stack. I will post the full exception message when I get home. Thanks again. iwdu15 wrote: Show quoteHide quote > sorry for not being clear, i meant put a mouse hook on the formload event. > then you can receive every mouse click....ex: > > > > Private Const HC_ACTION As Integer = 0 > Private Const WH_MOUSE_LL As Integer = 14 > Private Const WM_LBUTTONDOWN As Integer = &H201 > Private Const WM_MOUSEWHEEL As Integer = &H20A > > Private Declare Function SetWindowsHookEx Lib "user32" _ > Alias "SetWindowsHookExA" ( _ > ByVal idHook As Integer, _ > ByVal lpfn As LowLevelMouseProcDelegate, _ > 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 MSLLHOOKSTRUCT) As Integer > > Private Declare Function UnhookWindowsHookEx Lib "user32" ( _ > ByVal hHook As Integer) As Integer > > Private Function LowLevelMouseProc( _ > ByVal nCode As Integer, _ > ByVal wParam As Integer, _ > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > If (nCode = HC_ACTION) Then > > If wParam = WM_LBUTTONDOWN Then > > ''do something on left mouse click > > End If > > Return CallNextHookEx(hhkLowLevelMouse, _ > nCode, wParam, lParam) > > End If > > End Function > > Private Delegate Function LowLevelMouseProcDelegate( _ > ByVal nCode As Integer, _ > ByVal wParam As Integer, _ > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > > ''set mouse hook > Public Sub DisableMouse() > > 'Set Mouse Hook > hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, _ > AddressOf LowLevelMouseProc, _ > > Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, _ > 0) > > End Sub > > > ''release hook > Public Sub EnableMouse() > > 'Release Mouse Hook > UnhookWindowsHookEx(hhkLowLevelMouse) > > End Sub > > > hope this helps > > -- > -iwdu15 I think I know what the problem is. I just searched the news group and
I found the following thread: http://groups.google.ca/group/microsoft.public.dotnet.languages.vb/browse_thread/thread/a33d0ceeb075a1dd/91bcdefa8cc811ca?q=CallNextHookEx+stack&rnum=1#91bcdefa8cc811ca It suggests replaceing the byval to byref for the fourth parameter in the method. I will try it at home and I will let everybody know. Thanks again Ahmed wrote: Show quoteHide quote > Thanks alot. I think that almost did that trick except it is generating > an exception when reaching line: > > Return CallNextHookEx(hhkLowLevelMouse, _ > nCode, wParam, lParam) > > > That exception was about Stack. I will post the full exception message > when I get home. > > Thanks again. > > > iwdu15 wrote: > > sorry for not being clear, i meant put a mouse hook on the formload event. > > then you can receive every mouse click....ex: > > > > > > > > Private Const HC_ACTION As Integer = 0 > > Private Const WH_MOUSE_LL As Integer = 14 > > Private Const WM_LBUTTONDOWN As Integer = &H201 > > Private Const WM_MOUSEWHEEL As Integer = &H20A > > > > Private Declare Function SetWindowsHookEx Lib "user32" _ > > Alias "SetWindowsHookExA" ( _ > > ByVal idHook As Integer, _ > > ByVal lpfn As LowLevelMouseProcDelegate, _ > > 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 MSLLHOOKSTRUCT) As Integer > > > > Private Declare Function UnhookWindowsHookEx Lib "user32" ( _ > > ByVal hHook As Integer) As Integer > > > > Private Function LowLevelMouseProc( _ > > ByVal nCode As Integer, _ > > ByVal wParam As Integer, _ > > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > > > If (nCode = HC_ACTION) Then > > > > If wParam = WM_LBUTTONDOWN Then > > > > ''do something on left mouse click > > > > End If > > > > Return CallNextHookEx(hhkLowLevelMouse, _ > > nCode, wParam, lParam) > > > > End If > > > > End Function > > > > Private Delegate Function LowLevelMouseProcDelegate( _ > > ByVal nCode As Integer, _ > > ByVal wParam As Integer, _ > > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > > > > > ''set mouse hook > > Public Sub DisableMouse() > > > > 'Set Mouse Hook > > hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, _ > > AddressOf LowLevelMouseProc, _ > > > > Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, _ > > 0) > > > > End Sub > > > > > > ''release hook > > Public Sub EnableMouse() > > > > 'Release Mouse Hook > > UnhookWindowsHookEx(hhkLowLevelMouse) > > > > End Sub > > > > > > hope this helps > > > > -- > > -iwdu15 Thanks, its working fine.
Ahmed wrote: Show quoteHide quote > I think I know what the problem is. I just searched the news group and > I found the following thread: > > http://groups.google.ca/group/microsoft.public.dotnet.languages.vb/browse_thread/thread/a33d0ceeb075a1dd/91bcdefa8cc811ca?q=CallNextHookEx+stack&rnum=1#91bcdefa8cc811ca > > It suggests replaceing the byval to byref for the fourth parameter in > the method. I will try it at home and I will let everybody know. > > Thanks again > > Ahmed wrote: > > Thanks alot. I think that almost did that trick except it is generating > > an exception when reaching line: > > > > Return CallNextHookEx(hhkLowLevelMouse, _ > > nCode, wParam, lParam) > > > > > > That exception was about Stack. I will post the full exception message > > when I get home. > > > > Thanks again. > > > > > > iwdu15 wrote: > > > sorry for not being clear, i meant put a mouse hook on the formload event. > > > then you can receive every mouse click....ex: > > > > > > > > > > > > Private Const HC_ACTION As Integer = 0 > > > Private Const WH_MOUSE_LL As Integer = 14 > > > Private Const WM_LBUTTONDOWN As Integer = &H201 > > > Private Const WM_MOUSEWHEEL As Integer = &H20A > > > > > > Private Declare Function SetWindowsHookEx Lib "user32" _ > > > Alias "SetWindowsHookExA" ( _ > > > ByVal idHook As Integer, _ > > > ByVal lpfn As LowLevelMouseProcDelegate, _ > > > 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 MSLLHOOKSTRUCT) As Integer > > > > > > Private Declare Function UnhookWindowsHookEx Lib "user32" ( _ > > > ByVal hHook As Integer) As Integer > > > > > > Private Function LowLevelMouseProc( _ > > > ByVal nCode As Integer, _ > > > ByVal wParam As Integer, _ > > > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > > > > > If (nCode = HC_ACTION) Then > > > > > > If wParam = WM_LBUTTONDOWN Then > > > > > > ''do something on left mouse click > > > > > > End If > > > > > > Return CallNextHookEx(hhkLowLevelMouse, _ > > > nCode, wParam, lParam) > > > > > > End If > > > > > > End Function > > > > > > Private Delegate Function LowLevelMouseProcDelegate( _ > > > ByVal nCode As Integer, _ > > > ByVal wParam As Integer, _ > > > ByVal lParam As MSLLHOOKSTRUCT) As Integer > > > > > > > > > ''set mouse hook > > > Public Sub DisableMouse() > > > > > > 'Set Mouse Hook > > > hhkLowLevelMouse = SetWindowsHookEx(WH_MOUSE_LL, _ > > > AddressOf LowLevelMouseProc, _ > > > > > > Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly.GetModules()(0)).ToInt32, _ > > > 0) > > > > > > End Sub > > > > > > > > > ''release hook > > > Public Sub EnableMouse() > > > > > > 'Release Mouse Hook > > > UnhookWindowsHookEx(hhkLowLevelMouse) > > > > > > End Sub > > > > > > > > > hope this helps > > > > > > -- > > > -iwdu15
bring an already running app to the front
Loading CrystalReports.rpt, I Am Asked To Enter Login ID And Password DAAB problem most natural behavior on mouse wheel Cancel Constructor (Me = Nothing) RichTextBox in Vs2005 Vb.Net shows unformatted RTF Upload a file in a web server with a WinForm Lost focus how do I get date and time of compilation Rollover button sampel |
|||||||||||||||||||||||