VB中怎么捕捉鼠标左键按下的事件

VB中如何捕捉鼠标左键按下的事件?
哪位大侠指点一下,最好有例程说明,越详细越好啊!
小弟不是一般的初级   呵呵
如果也能捕捉到其他按键最好一起写出来了,十分感谢~

------解决方案--------------------
这是rainstormmaster(暴风雨 v2.0) 提供的网页
原文:http://rainstormmaster.cnblogs.com/archive/2006/01/18/319887.html
vb:如何禁止鼠标指针进入某个区域
我们知道ClipCursor可以将指针限制到指定区域,那么如何反其道而为之,禁止鼠标进入某个区域呢,答案是用鼠标钩子,在WIN NT 4.0 SP3以上系统可以用WH_MOUSE_LL这个钩子实现,这个钩子的特殊之处是不需要用dll,另外,这个钩子用到了一个结构体,简单说明一下:
typedef struct {
POINT pt;
DWORD mouseData;
DWORD flags;
DWORD time;
ULONG_PTR dwExtraInfo;
} MSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;

Members

pt
Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates.
mouseData
If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta. The low-order word is reserved. A positive value indicates that the wheel was rotated forward, away from the user; a negative value indicates that the wheel was rotated backward, toward the user. One wheel click is defined as WHEEL_DELTA, which is 120.
If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released, and the low-order word is reserved. This value can be one or more of the following values. Otherwise, mouseData is not used.

XBUTTON1
The first X button was pressed or released.
XBUTTON2
The second X button was pressed or released.
flags
Specifies the event-injected flag. An application can use the following value to test the mouse flags. Value Purpose
LLMHF_INJECTED Test the event-injected flag.

0
Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0.
1-15
Reserved.
time
Specifies the time stamp for this message.
dwExtraInfo
Specifies extra information associated with the message.
好了废话少说,看代码:
一个模块,一个窗体(名为Form1)

模块代码:
Option Explicit
Private Declare Sub CopyMemory Lib "kernel32.dll " Alias "RtlMoveMemory " (ByRef Destination As Any, ByRef Source As Any, ByVal Length As Long)
Private Declare Function PtInRect Lib "user32 " (lpRect As RECT, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function SetWindowsHookEx Lib "user32 " Alias "SetWindowsHookExA " (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32 " (ByVal hHook As Long) As Long
Private Declare Function CallNextHookEx Lib "user32 " (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lparam As Any) As Long
Private Const HC_ACTION = 0
Private Const WH_MOUSE_LL As Long = 14
Private Const WM_MOUSEMOVE = &H200

Public Type RECT