C# 实现全局鼠标钩子操作以及发送键盘事件

news/2024/12/22 7:07:40/

全局钩子定义

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;namespace WindowsFormsApp1
{public static class GlobalMousePosition{#region 获取鼠标当前位置public const int WH_MOUSE_LL = 14;public enum MouseMessages{WM_MOUSEMOVE = 0x0200}public delegate int LowLevelMouseProc(int nCode, IntPtr wParam, IntPtr lParam);[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern IntPtr SetWindowsHookEx(int idHook, LowLevelMouseProc lpfn, IntPtr hMod, uint dwThreadId);[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)][return: MarshalAs(UnmanagedType.Bool)]public static extern bool UnhookWindowsHookEx(IntPtr hhk);[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern int CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]public static extern IntPtr GetModuleHandle(string lpModuleName);#endregion#region 点击事件[DllImport("user32.dll")]static extern bool SetCursorPos(int x, int y);[DllImport("user32.dll")]public static extern void mouse_event(uint dwFlags, int dx, int dy, uint dwData, int dwExtraInfo);// 模拟鼠标点击一次public static void SimulateMouseClick(int x, int y){SetCursorPos(x, y);Thread.Sleep(100);  // 等待 100 毫秒,确保鼠标移动到指定位置// 模拟鼠标按下和释放操作(模拟点击)mouse_event(0x0002, x, y, 0, 0);  // 鼠标左键按下mouse_event(0x0004, x, y, 0, 0);  // 鼠标左键释放}#endregion}
}

winfrom窗体代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static System.Net.Mime.MediaTypeNames;
using static WindowsFormsApp1.GlobalMousePosition;namespace WindowsFormsApp1
{public partial class Form1 : Form{private LowLevelMouseProc mouseProc;private IntPtr mouseHookId = IntPtr.Zero;public Form1(){InitializeComponent();this.TopMost = true;}protected override void OnLoad(EventArgs e){base.OnLoad(e);// 注册全局鼠标钩子mouseProc = HookCallback;using (Process curProcess = Process.GetCurrentProcess())using (ProcessModule curModule = curProcess.MainModule){mouseHookId = SetWindowsHookEx(WH_MOUSE_LL, mouseProc, GetModuleHandle(curModule.ModuleName), 0);}}protected override void OnFormClosing(FormClosingEventArgs e){base.OnFormClosing(e);// 取消注册全局鼠标钩子UnhookWindowsHookEx(mouseHookId);}private int HookCallback(int nCode, IntPtr wParam, IntPtr lParam){if (nCode >= 0 && MouseMessages.WM_MOUSEMOVE == (MouseMessages)wParam){// 获取鼠标位置Point mousePosition = Cursor.Position;// 更新你的全局记录逻辑,比如将当前鼠标位置保存到全局变量或日志中// ...labelMousePosition.Text = string.Format("当前鼠标位置:X={0}, Y={1}", mousePosition.X, mousePosition.Y);}return CallNextHookEx(mouseHookId, nCode, wParam, lParam);}private void button1_Click(object sender, EventArgs e){Clipboard.Clear(); // 清空剪贴板int x = int.Parse(this.x.Text);int y = int.Parse(this.y.Text);string text = this.textbox.Text;Clipboard.SetText(text);Thread.Sleep(100);SimulateMouseClick(x, y);Thread.Sleep(100);SendKeys.Send("^(v)");Thread.Sleep(100);SendKeys.Send("\t");}}
}

效果截图:
在这里插入图片描述


http://www.ppmy.cn/news/598452.html

相关文章

基于Consul的分布式锁实现

我们在构建分布式系统的时候,经常需要控制对共享资源的互斥访问。这个时候我们就涉及到分布式锁(也称为全局锁)的实现,基于目前的各种工具,我们已经有了大量的实现方式,比如:基于Redis的实现、基…

lol服务器维护8月7,LOL8月7日更新维护到几点 英雄联盟8.7更新了哪些内容

LOL8月7日维护到什么时候?今天将迎来一次很大的更新,全服停机,很多小伙伴已经等不及调查时间了,要知道不能玩自己心爱的游戏简直就是度日如年啊。 英雄联盟在8.7迎来一个全服停机公告,这让很多热心玩家都迫不急的上游戏…

lol11号服务器维护到几点,lol2月11日维护到几点 2月11日lol维护更新公告

lol将要周二进行一次更新,好多小伙伴们都在问这次的更新时间,会维护到几点呢?有兴趣的小伙伴们就赶紧来和小编一起看看lol维护更新公告介绍吧! lol2月11日维护到几点 2月11日更新维护时长为9个小时(3:-12:00),本次更新…

LOL弗雷尔卓德服务器维护,英雄联盟4月28日维护到几点 部分大区模式维护公告...

英雄联盟4月28日维护到几点?英雄联盟维护内容是什么?英雄联盟今天维护到什么时候?想必有不少的小伙伴们都想知道吧,下面是英雄联盟部分大区模式维护公告,感兴趣的小伙伴们一起来看看吧。 英雄联盟4月28日维护到几点? 不管是哪一款游戏,游…

lol服务器维护9月30,英雄联盟4月30日更新维护几点结束_4月30日LOL10.9版本停机维护结束时间_3DM网游...

英雄联盟4月30日更新维护几点结束?英雄联盟在2020年4月30日停机更新至10.9版本,本次版本更新后FPX冠军皮肤和相关的活动,而且云顶之弈模式有大规模平衡性更新,大家等待更新结束后即可体验,但具体什么时候结束呢?下面小编为大家带…

10月15日lol服务器维护,lol10月15日维护到几点 英雄联盟2020年10月15日10.21版本维护结束时间...

lol10月15日维护到几点?英雄联盟在2020年10月15日停机维护更新至10.21版本,本次维护后上线了很多新皮肤,还有一些英雄改动等内容。想知道本次维护结束时间的玩家,下面99单机网小编带来了lol10.21版本维护结束时间,一起来看看吧。…

英雄联盟7月23日维修服务器,lol维护到几点今天 英雄联盟7月23日停机维护多长时间...

英雄联盟维护到几点今天?英雄联盟2020最新维护公告是什么?lol最新维护内容是什么?在英雄联盟这一游戏中,游戏的官方每隔一段时间都将会进行一次维护更新。想必有不少的小伙伴们都想知道吧,下面是英雄联盟2020最新维护公告,感兴趣的小伙伴们…

英雄联盟7月23日维修服务器,英雄联盟7月23日更新维护到几点结束 7月23日lol10.15版本更新维护结束时间...

英雄联盟7月23日更新维护到几点结束?英雄联盟在2020年7月23日停机更新10.15版本内容,在lol10.15版本中不仅有新英雄莉莉娅和新系列皮肤灵魂莲华推出,极限闪击模式也回归了。想体验新版本的内容吗,那么就需要等待更新结束,下面小编…