原创 c#中通过设置钩子监视鼠标移动收藏

新一篇: 如何锁定windows系统以及调用其它系统对话框 | 旧一篇: 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(
nullnull);
            }

            
return 0;
        }

    }

}

 

发表于 @ 2008年04月16日 22:01:00|评论(loading...)|编辑

新一篇: 如何锁定windows系统以及调用其它系统对话框 | 旧一篇: c#中拖动图片的例子

评论

#Hancat.Lee 发表于2008-04-17 11:40:54  IP: 59.39.158.*
非常不错.谢谢
#sheguiwei 发表于2008-04-18 20:26:44  IP: 222.216.74.*
看不太明白,楼主给点注释就好了
#AloneSword 发表于2008-04-20 16:05:46  IP: 10.16.34.*
简单的Demo,hook 的原理都在这里展示了。!
#cn_zhmg 发表于2008-04-22 19:41:21  IP: 220.173.43.*
很有用
#huyongzs 发表于2008-04-23 14:01:40  IP: 124.134.4.*
如果看不懂,需要补充windows核心编程等高级windows编程知识,也可以网络搜索如何设置钩子。
如果没看过《windows程序设计》一类的书,对我所说的上边课程可能就不能理解。
#xiacailan 发表于2008-04-24 15:16:59  IP: 61.232.0.*
我没看到什么效果啊?
#mackencap 发表于2008-04-24 15:58:46  IP: 221.201.97.*
不错 ,学到很多,谢谢分享
#ysjleila 发表于2008-04-24 16:19:09  IP: 222.90.74.*
真的很好,谢谢^_^
#yunajie 发表于2008-05-01 21:57:57  IP: 59.173.129.*
这个HOOK仅仅只能工作在本进程内,并不是全局HOOK
#jiandan 发表于2008-05-06 16:14:38  IP: 124.156.3.*
不错
#ifelseiff 发表于2008-05-14 09:35:32  IP: 60.20.136.*
真是长见识了
#yygfml 发表于2008-05-23 15:08:43  IP: 218.80.192.*
有书的电子版下载么?》
#ITchailiao 发表于2008-05-24 11:42:50  IP: 61.186.97.*
这段代码写到C#哪个才能实现呀?
比如是,windows应用程序,还是控制程序什么的。
初学者,望高手教教
#EvilCrow 发表于2008-06-05 11:30:25  IP: 58.244.55.*
有一下问题:
1) public delegate int HOOKPROC(int nCode, int wParam, int lParam);
这个声明是固定的格式嘛,参考的什么?
2) public static extern int SetWindowsHookEx(
HookType idHook,
HOOKPROC lpfn,
int hmod,
int dwThreadId);
这个function 中的第二, 三参数的类型是自定义的,这样可以嘛?为什么?
#zengjs 发表于2008-08-05 18:37:27  IP: 124.115.177.*
能否解析一下
发表评论  


登录
Csdn Blog version 3.1a
Copyright © 贾涛