要在C#程序中触发鼠标、键盘事件必须要调用windows函数。

一、鼠标事件的触发

1.引用windows函数mouse_event

/// <summary>
/// 鼠标事件
/// </summary>
/// <param name="flags">事件类型</param>
/// <param name="dx">x坐标值(0~65535)</param>
/// <param name="dy">y坐标值(0~65535)</param>
/// <param name="data">滚动值(120一个单位)</param>
/// <param name="extraInfo">不支持</param>
[DllImport("user32.dll")]
static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);

MouseEventFlag表示鼠标事件的类型,可取多个枚举值组合。注意dx,dy参数,必须是绝对坐标(0,0)~(65535,65535)中的一点。

 /// <summary>
/// 鼠标操作标志位集合
/// </summary>
[Flags]
enum MouseEventFlag : uint
{
/// <summary>
/// 鼠标移动事件
/// </summary>
Move = 0x0001, /// <summary>
/// 鼠标左键按下事件
/// </summary>
LeftDown = 0x0002,
LeftUp = 0x0004,
RightDown = 0x0008,
RightUp = 0x0010,
MiddleDown = 0x0020,
MiddleUp = 0x0040,
XDown = 0x0080,
XUp = 0x0100,
Wheel = 0x0800,
VirtualDesk = 0x4000,
/// <summary>
/// 设置鼠标坐标为绝对位置(dx,dy),否则为距离最后一次事件触发的相对位置
/// </summary>
Absolute = 0x8000
}

2.调用mouse_event函数,触发鼠标事件

  /// <summary>
/// 触发鼠标事件
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
private static void DoMouseClick(int x, int y)
{
int dx = (int)((double)x / Screen.PrimaryScreen.Bounds.Width * ); //屏幕分辨率映射到0~65535(0xffff,即16位)之间
int dy = (int)((double)y / Screen.PrimaryScreen.Bounds.Height * 0xffff); //转换为double类型运算,否则值为0、1
mouse_event(MouseEventFlag.Move | MouseEventFlag.LeftDown | MouseEventFlag.LeftUp | MouseEventFlag.Absolute, dx, dy, , new UIntPtr()); //点击
}

二、键盘事件的触发

1.引用windows函数keybd_event

/// <summary>
/// 键盘事件
/// </summary>
/// <param name="bVk"> virtual-key code</param>
/// <param name="bScan">hardware scan code</param>
/// <param name="dwFlags"> flags specifying various function options</param>
/// <param name="dwExtraInfo"> additional data associated with keystroke</param>
[DllImport("user32.dll")]
public static extern void keybd_event(byte bVk, byte bScan, int dwFlags, int dwExtraInfo);

bvk为键值,例如回车13,bScan设置为0,dwFlags设置0表示按下,2表示抬起;dwExtraInfo也设置为0即可。

2.调用keybd_event函数,触发键盘事件

下面的代码演示触发Ctrl+C组合键,执行复制操作。

            keybd_event((byte)Keys.ControlKey, , , );
keybd_event((byte)Keys.C, , , );
keybd_event((byte)Keys.ControlKey, , , );
keybd_event((byte)Keys.C, , , );

C#/winform 自动触发鼠标、键盘事件的更多相关文章

  1. 【Selenium专题】鼠标键盘事件

    引用包来自selenium-java-2.23.1.jar 调用以下代码时,需要引入actions类,以java为例: import org.openqa.selenium.interactions. ...

  2. Tkinter 鼠标键盘事件(一)

    一: 鼠标事件 <Button-1>                                                                     鼠标左键单击 ...

  3. Linux 模拟 鼠标 键盘 事件

    /************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: ...

  4. Python——pyHook监听鼠标键盘事件

    pyHook包为Windows中的全局鼠标和键盘事件提供回调. 底层C库报告的信息包括事件的时间,事件发生的窗口名称,事件的值,任何键盘修饰符等. 而正常工作需要pythoncom等操作系统的API的 ...

  5. Python - selenium_WebDriver 鼠标键盘事件

    from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_cha ...

  6. Selenium4.0+Python3系列(四) - 常见元素操作(含鼠标键盘事件)

    一.写在前面 上篇文章介绍的是关于浏览器的常见操作,接下来,我们将继续分享关于元素的常见操作,建议收藏.转发! 二.元素的状态 在操作元素之前,我们需要了解元素的常见状态. 1.常见元素状态判断,傻傻 ...

  7. C# 自动触发鼠标、键盘事件

    要在C#程序中触发鼠标.键盘事件必须要调用windows函数. 一.鼠标事件的触发 1.引用windows函数mouse_event /// <summary> /// 鼠标事件 /// ...

  8. QT 11 鼠标键盘事件添加

    鼠标事件 void mousePressEvent(QMouseEvent *event); //单击 void mouseReleaseEvent(QMouseEvent *event); //释放 ...

  9. 【转】Qt鼠标键盘事件

    http://blog.csdn.net/lovebird_27/article/details/50351336 Qt 程序需要在main()函数创建一个QCoreApplication对象,然后调 ...

随机推荐

  1. WPF阴影效果(DropShadowEffect)

    <TextBlock Text="阴影效果" FontSize="32"> <TextBlock.Effect> <DropSha ...

  2. OA项目——总结

    先来张大致结构图: 项目链接:https://github.com/shuai7boy/YM_OA

  3. KMP算法-Java实现

    目的: 为了解决字符串模式匹配 历程: 朴素模式匹配:逐次进行比较 KMP算法:利用匹配失败得到的信息,来最大限度的移动模式串,以此来减少比较次数提高性能 概念: m:是目标串长度 n:是模式串长度 ...

  4. 【JAVA并发编程实战】3、同步容器

    同步容器包括Vector和Hashtable,还有一些由Collections.synchronizedXxx等工厂方法创建的 1.同步容器类的问题 同步容器类都是线程安全的,但是有些时候还是要客户端 ...

  5. spring入门(三)【事务控制】

    在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要 ...

  6. 【转】Windows 窗口层次关系

    原文链接:undefined! 相信在Windows 下面编程的很多兄弟们都不是很清楚Windows 中窗口的层次关系是怎么样的,这个东西很久已经研究过一下,后来又忘记了,今天又一次遇到了这个问题,所 ...

  7. .net 实体类与json转换(.net自带类库实现)更新

    上一篇文章中写到在.net中实体类跟json格式的相互转换,今天在做具体转换时候,发现之前版本的jsonhelp对于日期类型的转换不全面.之前版本的jsonhelp中从实体类转换成json格式时候,将 ...

  8. 又到周末了,我们一起来研究【浏览器如何检测是否安装app】吧

    前言 扯淡 这个月比较倒霉,我送了女朋友一台笔记本电脑作为生日礼物,结果15天一过电脑就坏了,悲剧的我还把电脑盒子给扔了!淘宝不给换更不给退 于是被女朋友臭骂了一过星期后,今天本来在公司有任务的,但是 ...

  9. [原][C#][winForm]分级基金折溢价WinForm网络计算器

    分级基金折溢价WinForm网络计算器 通过子/母基金代码,从 [ 东方财富网,天天基金网,新浪 ] 抓取分级基金的子母基金数据(代码,名称,净值,价格), 并计算出子基金(A基金,B基金)以及母基金 ...

  10. javascript 实现一个回文数字

    写一个方法,让"1234"变成回文数字“1234321”,就是顺着读和倒着读都是一样的:注:不让用reverse()方法: function palindrome(str){ va ...