要在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# 自动触发鼠标、键盘事件的更多相关文章

  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#/winform 自动触发鼠标、键盘事件

    要在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. 15.Update Documents-官方文档摘录

    1.插入数据 db.inventory.insertMany( [ { item: "canvas", qty: 100, size: { h: 28, w: 35.5, uom: ...

  2. Web项目管理工具精选(上)

    原文:Web项目管理工具精选(上) 随着新兴科技公司的蓬勃发展,不少Web应用和浏览器工具在开发者.设计者.自由职业者和项目经理中间流行开来.这些工具在不断发展,我们也看到越来越多的桌面应用.移动应用 ...

  3. centos下apache安装

    ./configure --prefix=/usr/local/apache2 --enable-so --enable-proxy --enable-proxy-connect --enable-p ...

  4. yum源的报错排除

    echo "http://vault.centos.org/6.5/os/x86_64/" > /var/cache/yum/x86_64/6/base/mirrorlist ...

  5. 前端 javascript 定时器

    setInterval("执行的代码",间隔时间)毫秒单位 每5秒一次会提示出弹框 <!DOCTYPE html> <html lang="en&quo ...

  6. byte[]数组和int之间的转换

    这里简单记录下两种转换方式: 第一种: 1.int与byte[]之间的转换(类似的byte short,long型) /** * 将int数值转换为占四个字节的byte数组,本方法适用于(低位在前,高 ...

  7. 详解C++中命名空间的意义和用法

    看过鸡啄米的C++编程入门系列教程的朋友,应该能注意到,在其中的很多实例中,都有这么一条语句:using namespace std;,即使用命名空间std,其作用就是规定该文件中使用的标准库函数都是 ...

  8. 转 Merkle Tree(默克尔树)算法解析

    Merkle Tree概念  Merkle Tree,通常也被称作Hash Tree,顾名思义,就是存储hash值的一棵树.Merkle树的叶子是数据块(例如,文件或者文件的集合)的hash值.非叶节 ...

  9. python字符串的操作(去掉空格strip(),切片,查找,连接join(),分割split(),转换首字母大写, 转换字母大小写...)

    #可变变量:list, 字典#不可变变量:元祖,字符串字符串的操作(去掉空格, 切片, 查找, 连接, 分割, 转换首字母大写, 转换字母大小写, 判断是否是数字字母, 成员运算符(in / not ...

  10. IOS自动化定位方式

    原文地址http://blog.csdn.net/wuyepiaoxue789/article/details/77885136 元素属性的介绍 type:元素类型,与className作用一致,如: ...