C#/winform 自动触发鼠标、键盘事件

要在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 * 65535); //屏幕分辨率映射到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, 0, new UIntPtr(0)); //点击
        }

二、键盘事件的触发

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, 0, 0, 0);
            keybd_event((byte)Keys.C, 0, 0, 0);
            keybd_event((byte)Keys.ControlKey, 0, 2, 0);
            keybd_event((byte)Keys.C, 0, 2, 0);

C#/winform 自动触发鼠标、键盘事件

时间: 2024-07-30 13:43:32

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

selenium鼠标键盘事件(转)

概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys

Selenium 鼠标键盘事件

鼠标事件-概述 1.单击 click().click(WebElement onElement) 2.双击doubleClick() . doubleClick(WebElement onElement) 3.右击contextClick(). contextClick(WebElement onElement) 4.移动/悬浮 moveByOffset(int xOffset, int yOffset).moveToElement(WebElement toElement).moveToEle

Python - selenium_WebDriver 鼠标键盘事件

from selenium import webdriver #引入ActionChains类 提供了鼠标的操作方法 from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys from ReadTxt_demo import readTxt import time #鼠标键盘事件 ''' ActionChains 常用方法 per

Linux 模拟 鼠标 键盘 事件

/************************************************************************ * Linux 模拟 鼠标 键盘 事件 * 说明: * 以前看到有些软件能够控制鼠标移动,键盘操作等功能,总想知道这些到底 * 是怎么做到的,好像是2年前也尝试去做这件事,但那时候对知识的匮乏直接导致 * 无法进行,早上突然想到这件事,于是又搜索了一下,鉴于目前经常接触Linux * 驱动,对这些东西的理解也就很容易. * * 2016-2-27 深

Selenese 命令清单 - 鼠标键盘事件控制命令

点击链接加入群[悦分享测试联盟]:https://jq.qq.com/?_wv=1027&k=5DiePik 简介 Selenium为用户提供了大量的Selenese命令,可以非常方便的为用户编写脚本实用,其中实际场景运用需要的并不多,为了能更好的利用这些命令,我对几乎所有Selenese命令做了分类,分类内容如下: 包含操作页面元素常用命令,以及一些不常用到的高级使用命令 对鼠标键盘事件控制命令 wait相关命令 veriy相关命令 assert相关命令 store存储器相关命令 Part I

做UI最全的鼠标键盘事件!

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是ActionChains类,在使用该类做键盘操作的过程中会配合使用到 Keys 数据存储类,Keys包含键盘上所有特殊按键. 一.鼠标点击操作 click(element=None)左击context_click(element=N

定时器之延时触发鼠标悬浮事件

前端代码: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>定时器之延时触发鼠标悬浮事件</title> <script src="https://lib.baomitu.com/jquery/3.4.1/jquery.js"></script> </head> <style>

由chrome剪贴板问题研究到了js模拟鼠标键盘事件

写在前面 最近公司在搞浏览器兼容的事情,所有浏览器兼容的问题不得不一个人包了.下面来说一下今天遇到的一个问题吧 大家都知道IE下面如果要获得剪贴板里面的信息的话,代码应该如下所示 window.clipboardData.getData("Text") 可是在chrome下面就行不通了,chrome下面没有类似ie的这种方法,那应该怎么办呢,百度了一下,发现还真有办法. 只要在HTML界面上放上一个text类型的控件,如下所示 <textarea id="textAre

【PyQt5-Qt Designer】鼠标+键盘事件

重定义鼠标响应+键盘响应事件 一,每个事件都被封装成相应的类: pyqt中,每个事件类型都被封装成相应的事件类,如鼠标事件为QMouseEvent,键盘事件为QKeyEvent等.而它们的基类是QEvent. 二,基类QEvent的几个重要方法: accept() 表示事件已处理,不需要向父窗口传播 ignore()表示事件未处理,继续向父窗口传播f type()返回事件类型,如QtCore.QEvent.MouseButtonPress,一般由基事件调用.因为其它事件已经知道自己的事件类型了.