C#-实现的鼠标钩子
c# 实现 鼠标 钩子
2023-09-11 14:21:58 时间
更新时间:2015年03月11日 14:33:47 投稿:hebedich 我要评论
本文给大家分享的是使用C#实现鼠标钩子功能,程序已能获取鼠标坐标,其他就没别的功能了,有需要的小伙伴参考下吧。
C#实现的鼠标钩子,可以获取鼠标在屏幕中的坐标,记得要以管理员权限运行才行
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Text;
using System.Windows.Forms;
namespace app01{
public partial class Form1 : Form {
public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);
//定义钩子句柄
public static int hHook = 0;
//定义钩子类型
public const int WH_MOUSE_LL = 14;
public HookProc MyProcedure;
//安装钩子
[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, IntPtr wParam, IntPtr lParam);
[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;
}
public Form1() {
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e) {
if (hHook == 0) {
MyProcedure = new HookProc(this.MouseHookProc);
//这里挂节钩子
hHook = SetWindowsHookEx(WH_MOUSE_LL, MyProcedure, Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);
if (hHook == 0) {
MessageBox.Show("SetWindowsHookEx Failed");
return;
}
button1.Text = "卸载钩子";
} else {
bool ret = UnhookWindowsHookEx(hHook);
if (ret == false){
MessageBox.Show("UnhookWindowsHookEx Failed");
return;
}
hHook = 0;
button1.Text = "安装钩子";
}
}
public int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam) {
MouseHookStruct MyMouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
if (nCode < 0) {
return CallNextHookEx(hHook, nCode, wParam, lParam);
} else {
String strCaption = "x = " + MyMouseHookStruct.pt.x.ToString("d") + " y = " + MyMouseHookStruct.pt.y.ToString("d");
this.Text = strCaption;
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
}
}
}
相关文章
- C# 实现WebSocket服务端实例
- C#订阅与发布标准实现 visual studio code .net 开发 设计模式之☞策略模式 C#字符串转二进制、二进制转字符串 c# 接口的协变和逆变 c# 使用迭代器来创建可枚举类型 博客园首页新随笔联系订阅管理 随笔 - 117 文章 - 0 评论 - 57 c# 创建,加载,修改XML文档
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- c#打包文件解压缩 C#中使用委托、接口、匿名方法、泛型委托实现加减乘除算法 一个简单例子理解C#的协变和逆变 对于过长字符串的大小比对
- [C#]使用 C# 代码实现拓扑排序 dotNet Core WEB程序使用 Nginx反向代理 C#里面获得应用程序的当前路径 关于Nginx设置端口号,在Asp.net 获取不到的,解决办法 .Net程序员 初学Ubuntu ,配置Nignix 夜深了,写了个JQuery的省市区三级级联效果
- windbg的时间旅行实现对 C# 程序的终极调试
- Word控件Spire.Doc 【段落处理】教程(十一):如何在C#中隐藏单词段落
- c#接口interface学习
- c#中的继承学习总结
- C#【必备技能篇】使用NPOI实现对excel的读取和写入
- 在C#中使用SerialPort类实现串口通信 遇到多线程问题
- C#实现 UDP简单广播
- 基于C#+ACCESS实现 RestfulAPI 的(WinForm) 项目实施管理系统【100010636】
- 基于C#+SqlLite实现(WinForm)邮件收发管理系统【100010495】
- 基于C#+MySQL实现(WinForm)企业设备使用信息管理系统【100010191】
- C#和Java,究竟选哪个方向?我只说事实,你自己分析……
- 用c#开发微信 (12) 微统计 - 阅读分享统计系统 2 业务逻辑实现
- 在C#的MVC中 Vue的基本用法实例
- 《C#零基础入门之百识百例》(五十)嵌套类和嵌套方法 -- 汉诺塔游戏
- 《C#零基础入门之百识百例》(五十六)多态介绍 -- 简单工厂模式
- C#实现一个倒计时
- C# 合并两个不同类型集合数据
- c#GDI+实现用鼠标画矩形
- C#-IO-文件读写并显示文件读取进度
- c# dev gridControl 实现列宽度自适应
- 【WPF/C#】图层筛选/拾取——Color Picker