C#高级:用Csharp操作鼠标和键盘

devtools/2025/1/19 22:30:01/

一、winform

1.实时获取鼠标位置

public Form1()
{InitializeComponent();InitialTime();
}private void InitialTime()
{// 初始化 Timer 控件var timer = new System.Windows.Forms.Timer();timer.Interval = 100;  // 设置为 100 毫秒,即每 0.1 秒更新一次timer.Tick += Timer_Tick;  // 绑定 Tick 事件timer.Start();  // 启动 Timer
}// Timer 每次触发时,更新坐标信息
private void Timer_Tick(object sender, EventArgs e)
{// 获取当前鼠标坐标var mousePos = Cursor.Position;// 更新 Label 控件显示坐标label1.Text = $"X: {mousePos.X}, Y: {mousePos.Y}";
}

2.实时监控键盘输入

public Form2()
{InitializeComponent();this.KeyPreview = true;  // 确保事件先在 Form 中触发this.KeyDown += MainForm_KeyDown;
}
private void MainForm_KeyDown(object sender, KeyEventArgs e)
{// 检查是否按下了 ALT 和数字 1 键if (e.Alt && e.KeyCode == Keys.D1){MessageBox.Show("ALT + 1 被按下");}
}

 

二、操纵鼠标键盘的相关方法

public class MouseContronller
{// 导入 SetCursorPos 函数,用于设置鼠标位置[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern bool SetCursorPos(int x, int y);// 导入 mouse_event 函数,用于模拟鼠标点击[DllImport("user32.dll")]public static extern void mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);// 导入 keybd_event 函数,用于模拟键盘按键[DllImport("user32.dll", CharSet = CharSet.Auto)]public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);// 键盘事件常量const int KEYEVENTF_KEYDOWN = 0x0000;  // 按键按下const int KEYEVENTF_KEYUP = 0x0002;    // 按键松开// 鼠标点击的标志const int MOUSEEVENTF_LEFTDOWN = 0x0002;const int MOUSEEVENTF_LEFTUP = 0x0004;private const byte VK_CONTROL = 0x11;private const byte VK_V = 0x56;/// <summary>/// 移动到指定位置,并点击指定位置/// </summary>/// <param name="x"></param>/// <param name="y"></param>public static void MoveToAndClick(int x , int y){// 设置鼠标位置到 (x,y)SetCursorPos(x, y);// 模拟鼠标点击(左键按下和松开)mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); // 按下mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);   // 松开}/// <summary>/// 移动到指定位置/// </summary>/// <param name="x"></param>/// <param name="y"></param>public static void MoveTo(int x, int y){// 设置鼠标位置到 (x,y)SetCursorPos(x, y);}/// <summary>/// 模拟键盘点击某个按键/// </summary>/// <param name="key"></param>public static void KeyClick(byte key){keybd_event(key, 0, KEYEVENTF_KEYDOWN, 0); // 按下keybd_event(key, 0, KEYEVENTF_KEYUP, 0);   // 松开}/// <summary>/// 模拟键盘输入字符串(仅支持英文字母和数字)/// </summary>/// <param name="inputString"></param>public static void KeyboardInput(string inputString){// 获取当前 CapsLock 键的状态bool isCapsLockOn = Control.IsKeyLocked(Keys.CapsLock);Thread.Sleep(50);  // 添加适当延迟foreach (char c in inputString){// 判断当前字符是否是大写bool isUpper = char.IsUpper(c);// 如果 CapsLock 状态与需要的大小写不匹配,按下 CapsLock 键if (isUpper && !isCapsLockOn || !isUpper && isCapsLockOn){KeyClick(0x14);// 按一下 CapsLock 键}// 按下字符键byte key = (byte)Char.ToUpper(c);KeyClick(key);// 按一下字符键// 如果 CapsLock 状态与需要的大小写不匹配,按下 CapsLock 键if (isUpper && !isCapsLockOn || !isUpper && isCapsLockOn){KeyClick(0x14);// 按一下 CapsLock 键}Thread.Sleep(50);  // 添加适当延迟}}/// <summary>/// 【推荐】模拟键盘输入字符串(支持所有字符,本质是复制黏贴)/// </summary>/// <param name="inputString"></param>public static void KeyboardPlusInput(string inputString){Thread.Sleep(100);  // 添加适当延迟Clipboard.SetText(inputString);Thread.Sleep(100);  // 添加适当延迟// 按下 Ctrl 键keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYDOWN, 0);// 按下 V 键keybd_event(VK_V, 0, KEYEVENTF_KEYDOWN, 0);// 松开 V 键keybd_event(VK_V, 0, KEYEVENTF_KEYUP, 0);// 松开 Ctrl 键keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);}
}


http://www.ppmy.cn/devtools/151931.html

相关文章

《机器学习》——SVD(奇异分解)降维

文章目录 SVD基本定义SVD降维的步骤SVD降维使用场景SVD 降维的优缺点SVD降维实例导入所需库定义SVD降维函数导入图像处理图像处理图像打印降维结果并显示处理后两个图像的对比图 SVD基本定义 简单来说就是&#xff0c;通过SVD&#xff08;奇异值分解&#xff09;对矩阵数据进行…

基于 Python 和 Django 的课程管理系统设计与实现

标题:基于 Python 和 Django 的课程管理系统设计与实现 内容:1.摘要 摘要&#xff1a;本文介绍了基于 Python 和 Django 的课程管理系统的设计与实现。文章首先阐述了课程管理系统的背景和意义&#xff0c;接着详细描述了系统的设计与实现过程&#xff0c;包括系统架构、功能模…

nginx 配置ssl_dhparam好处及缺点

ssl_dhparam 是 Nginx 配置指令之一&#xff0c;用于配置 Diffie-Hellman 参数&#xff0c;这是一种用于密钥交换的加密算法。配置 Diffie-Hellman 参数可以提高 SSL/TLS 的安全性。 以下是 ssl_dhparam 的优点和缺点&#xff1a; 优点&#xff1a; 提高 SSL/TLS 安全性&…

6、原来可以这样理解C语言_函数(1/8)函数的概念

目录 一、函数的概念 一、函数的概念 数学中我们其实就⻅过函数的概念&#xff0c;⽐如&#xff1a;⼀次函数 ykxb &#xff0c;k和b都是常数&#xff0c;给⼀个任意的x&#xff0c;就 得到⼀个y值。 其实在C语⾔也引⼊函数&#xff08;function&#xff09;的概念&#xff0c…

StyleGaussian: Instant 3D Style Transferwith Gaussian Splatting 论文解读

目录 一、概述 二、相关工作 1、辐射场 2、3D编辑 3、风格迁移 三、StyleGaussian 1、特征嵌入 2、风格迁移 3、解码 四、实验 1、不同backbone下的量化和定性指标 2、解码器设计上的测试 3、内容损失平衡 4、风格平滑插值 一、概述 提出了StyleGaussian&#…

python-leetcode-快乐数

202. 快乐数 - 力扣&#xff08;LeetCode&#xff09; class Solution:def isHappy(self, n: int) -> bool:def get_next(number):return sum(int(digit) ** 2 for digit in str(number))seen set()while n ! 1 and n not in seen:seen.add(n)n get_next(n)return n 1

RabbitMQ确保消息可靠性

消息丢失的可能性 支付服务先扣减余额和更新支付状态&#xff08;这俩是同步调用&#xff09;&#xff0c;然后通过RabbitMq异步调用支付服务更新订单状态。但是有些情况下&#xff0c;可能订单已经支付 &#xff0c;但是更新订单状态却失败了&#xff0c;这就出现了消息丢失。…

第八届西湖论剑初赛PWN题部分题解

PWN Vpwn 下载附件&#xff0c;里面两个文件一个Vpwn,一个库文件&#xff0c;先check一下Vpwn文件看看 64位保护全开&#xff0c;拖进IDA中进行分析,查看main函数 __int64 __fastcall main(int a1, char **a2, char **a3) {int v3; // ebxint v5; // [rsp8h] [rbp-68h] BYREF…