static int hMouseHook = 0; HookProc MouseHookProcedure; [StructLayout(LayoutKind.Sequential)] public class POINT{ public int x; public int y; }[StructLayout(LayoutKind.Sequential)] public class MouseHookStruct{ public POINT pt; public int hWnd; public int wHitTestCode; public int dwExtraInfo; }[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)] public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam); public MouseHook() { Start(); }~MouseHook() { Stop(); } public void Start() { if(hMouseHook == 0) { MouseHookProcedure = new HookProc(MouseHookProc); hMouseHook = SetWindowsHookEx( 14, MouseHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); if(hMouseHook == 0 ) { Stop(); throw new Exception("Error"); } } }public void Stop() { bool flag =true; if(hMouseHook != 0) { flag = UnhookWindowsHookEx(hMouseHook); hMouseHook = 0; }
if (!flag) throw new Exception("Error"); }private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam) { MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct)); // MyMouseHookStruct is result.
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 最新版本:20070212http://www.cnblogs.com/feiyun0112/archive/2006/09/20/509783.html
HookProc MouseHookProcedure;
[StructLayout(LayoutKind.Sequential)]
public class POINT{
public int x;
public int y;
}[StructLayout(LayoutKind.Sequential)]
public class MouseHookStruct{
public POINT pt;
public int hWnd;
public int wHitTestCode;
public int dwExtraInfo;
}[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern bool UnhookWindowsHookEx(int idHook);[DllImport("user32.dll",CharSet=CharSet.Auto, CallingConvention=CallingConvention.StdCall)]
public static extern int CallNextHookEx(int idHook, int nCode, Int32 wParam, IntPtr lParam); public delegate int HookProc(int nCode, Int32 wParam, IntPtr lParam);
public MouseHook()
{
Start();
}~MouseHook()
{
Stop();
} public void Start()
{
if(hMouseHook == 0)
{
MouseHookProcedure = new HookProc(MouseHookProc); hMouseHook = SetWindowsHookEx( 14, MouseHookProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0); if(hMouseHook == 0 )
{
Stop();
throw new Exception("Error");
}
}
}public void Stop()
{
bool flag =true;
if(hMouseHook != 0)
{
flag = UnhookWindowsHookEx(hMouseHook);
hMouseHook = 0;
}
if (!flag) throw new Exception("Error");
}private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
// MyMouseHookStruct is result.
return CallNextHookEx(hMouseHook, nCode, wParam, lParam);
}