c#中通过设置钩子监视鼠标移动

这个问题来自论坛提问,C#的大致代码如下

using  System;
using  System.Windows.Forms;
using  System.Runtime.InteropServices;
namespace  WindowsApplication1
{
    
public   partial   class  Form1 : Form
    
{
        
public  Form1()
        
{
            InitializeComponent();
        }

         
        
private   void  Form1_Load( object  sender, EventArgs e)
        
{
            Win32Hook hook 
=   new  Win32Hook();
            hook.onMouseChange 
+=   new  EventHandler(hook_onMouseChange);
            hook.SetHook();
        }


        
void  hook_onMouseChange( object  sender, EventArgs e)
        
{
            
this .Text  =  Cursor.Position.ToString();
        }

    }

    
public   class  Win32Hook
    
{

        [DllImport(
" kernel32 " )]
        
public   static   extern   int  GetCurrentThreadId();

        [DllImport(
" user32 " ,CharSet  =  CharSet.Auto, CallingConvention  =  CallingConvention.StdCall)]
        
public   static   extern   int  SetWindowsHookEx(
            HookType idHook,
            HOOKPROC lpfn,
            
int  hmod,
            
int  dwThreadId);

        
public   enum  HookType
        
{
            WH_GETMESSAGE 
=   3
        }


        
public   delegate   int  HOOKPROC( int  nCode,  int  wParam,  int  lParam);

        
public   event  System.EventHandler onMouseChange;

        
public   void  SetHook()
        
{
            SetWindowsHookEx(HookType.WH_GETMESSAGE,
                
new  HOOKPROC( this .MyKeyboardProc),
                
0 ,
                GetCurrentThreadId());
        }


        
public   int  MyKeyboardProc( int  nCode,  int  wParam,  int  lParam)
        
{
            
if  (onMouseChange  !=   null )
            
{
                onMouseChange(
null null );
            }

            
return   0 ;
        }

    }

}

 

posted on 2008-04-16 22:01  代码王子  阅读(420)  评论(0编辑  收藏  举报

导航