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

一、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.mzph.cn/pingmian/67819.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【中国电信-安全大脑产品介绍】

座右铭&#xff1a;人生的道路上无论如何选择总会有遗憾的&#xff01; 文章目录 前言一、安全大脑介绍二、中国电信-安全大脑产品分类1.防护版2.审计版 三、安全大脑-部署方案总结 前言 安全占据我们日常生活中首要地位&#xff0c;它时时刻刻提醒着我们出入平安。当然网络安…

数据库:MongoDB命令行帮助解释

MongoDB命令&#xff1a; mongodmongosmongoperrormongoexportmongofilesmongoimportmongorestoreMongostat MongoDB包中的核心组件包括: mongod 是 MongoDB 的核心服务器进程&#xff0c;负责数据存储和管理。mongos 是分片集群的路由进程&#xff0c;负责将请求路由到正确…

洛谷P8837

[传智杯 #3 决赛] 商店 - 洛谷 代码区&#xff1a; #include<stdio.h> #include<stdlib.h> int cmp(const void*a,const void *b){return *(int*)b-*(int*)a; } int main(){int n,m;scanf("%d%d",&n,&m);int w[n];int c[m];for(int i0;i<n;…

多线程杂谈:惊群现象、CAS、安全的单例

引言 本文是一篇杂谈&#xff0c;帮助大家了解多线程可能会出现的面试题。 目录 引言 惊群现象 结合条件变量 CAS原子操作&#xff08;cmp & swap&#xff09; 线程控制&#xff1a;两个线程交替打印奇偶数 智能指针线程安全 单例模式线程安全 最简单的单例&…

三分钟简单了解HTML的一些语句

1.图片建议建立一个文件夹如下图所示 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"keywords"><title>魔神羽落</title><style>.testone{background-color: #ff53e…

HCIP笔记4--OSPF域内路由计算

1. 域内LSA 1.1 一类LSA 一类LSA: 路由器直连状态&#xff0c;Router LSA。 串口需要两端配置好IP,才会产生一类LSA; 以太网口只需要一端配置了IP就会直接产生一类LSA。 LSA通用头部 Type: Router 直连路由LS id: 12.1.1.1 路由器router idAdv rtr: 12.1.1.1 通告的路由器&…

k8s基础(7)—Kubernetes-Secret

Secret概述&#xff1a; Secret 是一种包含少量敏感信息例如密码、令牌或密钥的对象。 这样的信息可能会被放在 Pod 规约中或者镜像中。 使用 Secret 意味着你不需要在应用程序代码中包含机密数据。 由于创建 Secret 可以独立于使用它们的 Pod&#xff0c; 因此在创建、查看和…

【leetcode100】验证二叉搜索树

1、题目描述 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 示例 1&…

谈谈MySQL中的索引和事务

目录 1. 索引 1.1 索引介绍 1.2 缺陷 1.3 使用 1.3.1 查看索引 1.3.2 创建索引 1.3.3 删除索引 2. 索引底层的数据结构 2.1 B树 3. 事务 3.1 为什么使用事务 3.2 事务的使用 3.3 事务的基本特性 1. 索引 1.1 索引介绍 索引相当于一本书的目录(index), 在一…

2024:CSDN上的收获与蜕变——我的技术成长之旅

2024&#xff1a;CSDN上的收获与蜕变——我的技术成长之旅 前言数据见证&#xff1a;2024年的创作足迹荣誉殿堂&#xff1a;各平台的创作证书与认可社区共建&#xff1a;行业贡献与互动交流展望未来&#xff1a;2025年的目标与计划结语 前言 博主简介&#xff1a;江湖有缘 在技…

博客之星2024年度-技术总结:技术探险家小板的一年的征程

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 技术探险家的新一年征程 2.0 数据库管理与优化&#xff1a;MySQL 的魔法森林 2.1 穿越基础概念的迷雾 2.2 实践应用&#xff1a;成为森林的主人 2.3 性能调优&…

【vim】vim怎样直接跳转到某行?

vim怎样直接跳转到某行&#xff1f; 一、使用行号跳转二、使用相对行号跳转三、使用标记跳转 在Vim中直接跳转到某行可以使用以下几种方法&#xff1a; 一、使用行号跳转 在命令模式下&#xff0c;输入冒号:&#xff0c;然后输入你想要跳转的行号&#xff0c;最后按回车键。例…

SentencePiece和 WordPiece tokenization 的含义和区别

SentencePiece和 WordPiece tokenization 的含义和区别 SentencePiece 和 WordPiece 都是常用的分词(tokenization)技术,主要用于自然语言处理(NLP)中的文本预处理,尤其是在处理大规模文本数据时。它们都基于子词(subword)单元,能够将未登录词(out-of-vocabulary, O…

视频m3u8形式播放 -- python and html

hls hls官网地址 创建项目 ts为视频片段 m3u8文件内容 html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" …

【知识分享】PCIe5.0 TxRx 电气设计参数汇总

目录 0 引言 1 参考时钟--Refclk 2 发射端通道设计 3 发送均衡技术 4 接收端通道设计 5 接收均衡技术 6 结语 7 参考文献 8 扩展阅读 0 引言 PCI Express Base Specification 5.0的电气规范中&#xff0c;关键技术要点如下&#xff1a; 1. 支持2.5、5.0、8.0、16.0和3…

【HF设计模式】06-命令模式

声明&#xff1a;仅为个人学习总结&#xff0c;还请批判性查看&#xff0c;如有不同观点&#xff0c;欢迎交流。 摘要 《Head First设计模式》第6章笔记&#xff1a;结合示例应用和代码&#xff0c;介绍命令模式&#xff0c;包括遇到的问题、采用的解决方案、遵循的 OO 原则、…

设计模式-模板方法实现

文章目录 模式结构模式特点示例代码输出结果关键点解析模式的优缺点使用场景总结 模板方法模式&#xff08;Template Method Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一个操作中的算法骨架&#xff0c;而将某些步骤的实现延迟到子类中。通过这种方式&…

记一次数据库连接 bug

整个的报错如下&#xff1a; com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Metho…

Java 前端详解

Java 前端详解 Java 前端开发主要涉及使用 Java 相关技术和框架来创建用户界面和处理用户交互。虽然 Java 原本是后端开发的主力语言&#xff0c;但它也提供了许多前端开发工具和框架。以下是 Java 前端开发的主要内容和技术栈。 一、Java 前端技术栈 Java Swing 和 AWT AWT (…

【游戏设计原理】76 - 惩罚

惩罚是玩家在游戏中得到反馈的一种形式&#xff0c;可以认为是一种负反馈。 除了文中提到的几种惩罚机制&#xff08;“生命/游戏结束/继续”、“枯萎”、“永久死亡”&#xff09;&#xff0c;还有其他一些常见的惩罚类型&#xff0c;它们的设计主要目的是增加游戏的挑战性&a…