我们需要用到的mouse_event函数,位于user32.dll这个库文件里面,所以我们要先声明引用。

[System.Runtime.InteropServices.DllImport("user32")]
        private static extern int mouse_event(int dwFlags, int dx, int dy, int dwData, int dwExtraInfo);
        //移动鼠标 
        const int MOUSEEVENTF_MOVE = 0x0001;
        //模拟鼠标左键按下 
        const int MOUSEEVENTF_LEFTDOWN = 0x0002;
        //模拟鼠标左键抬起 
        const int MOUSEEVENTF_LEFTUP = 0x0004;
        //模拟鼠标右键按下 
        const int MOUSEEVENTF_RIGHTDOWN = 0x0008;
        //模拟鼠标右键抬起 
        const int MOUSEEVENTF_RIGHTUP = 0x0010;
        //模拟鼠标中键按下 
        const int MOUSEEVENTF_MIDDLEDOWN = 0x0020;
        //模拟鼠标中键抬起 
        const int MOUSEEVENTF_MIDDLEUP = 0x0040;
        //标示是否采用绝对坐标 
        const int MOUSEEVENTF_ABSOLUTE = 0x8000;
        //模拟鼠标滚轮滚动操作,必须配合dwData参数
        const int MOUSEEVENTF_WHEEL = 0x0800;

public static void TestMoveMouse()
        {
            Console.WriteLine("模拟鼠标移动5个像素点。");
            //mouse_event(MOUSEEVENTF_MOVE, 50, 50, 0, 0);//相对当前鼠标位置x轴和y轴分别移动50像素
            mouse_event(MOUSEEVENTF_WHEEL, 0, 0, -20, 0);//鼠标滚动,使界面向下滚动20的高度
        }

​dwFlags:​标志位集,指定点击按钮和鼠标动作的多种情况。此参数里的各位可以是下列值的任何合理组合:

MOUSEEVENTF_ABSOLUTE:表明参数dX,dy含有规范化的绝对坐标。如果不设置此位,参数含有相对数据:相对于上次位置的改动位置。此标志可被设置,也可不设置,不管鼠标的类型或与系统相连的类似于鼠标的设备的类型如何。要得到关于相对鼠标动作的信息,参见下面备注部分。
MOUSEEVENTF_MOVE:表明发生移动。
MOUSEEVENTF_LEFTDOWN:表明接按下鼠标左键。
MOUSEEVENTF_LEFTUP:表明松开鼠标左键。
MOUSEEVENTF_RIGHTDOWN:表明按下鼠标右键。
MOUSEEVENTF_RIGHTUP:表明松开鼠标右键。
MOUSEEVENTF_MIDDLEDOWN:表明按下鼠标中键。
MOUSEEVENTF_MIDDLEUP:表明松开鼠标中键。
MOUSEEVENTF_WHEEL:在Windows NT中如果鼠标有一个轮,表明鼠标轮被移动。移动的数量由dwData给出。
​dx:​指定鼠标沿x轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际X坐标;给出的相对数据作为移动的mickeys数。一个mickey表示鼠标移动的数量,表明鼠标已经移动。

​dy:​指定鼠标沿y轴的绝对位置或者从上次鼠标事件产生以来移动的数量,依赖于MOUSEEVENTF_ABSOLUTE的设置。给出的绝对数据作为鼠标的实际y坐标,给出的相对数据作为移动的mickeys数。

​dwData:​如果dwFlags为MOUSEEVENTF_WHEEL,则dwData指定鼠标轮移动的数量。正值表明鼠标轮向前转动,即远离用户的方向;负值表明鼠标轮向后转动,即朝向用户。一个轮击定义为WHEEL_DELTA,即120。如果dwFlagsS不是MOUSEEVENTF_WHEEL,则dWData应为零。

​dwExtralnfo:​指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息。

​返回值:​无。

​程序中我们直接调用mouse_event函数就可以了 mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0);​

1、这里是鼠标左键按下和松开两个事件的组合即一次单击: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

2、模拟鼠标右键单击事件: mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 )

3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件: mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 )

4、使用绝对坐标:mouse_event (MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0)

需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。

5、直接设定绝对坐标并单击 mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 其中X,Y分别是你要点击的点的横坐标和纵坐标

​键盘模拟用 Keybd_event函数​

Keybd_event能触发一个按键事 件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。

函数原型:void keybd_event( BYTE bVk, BYTE bScan, DWORD dwFlags, ULONG_PTR dwExtraInfo );

参数说明:

bVk 虚拟按键代码编号

bScan 按键的的硬件扫描代码

dwFlags 控制功能操作的各个方面;​KEYEVENTF_EXTENDEDKEY​:如果指定,扫描代码前面有一个前缀字节,其值为0xE0;​KEYEVENTF_KEYUP​:如果指定,则抬起按键。

dwExtraInfo 按键动作的附加信息

返回值:无返回值

Keybd_event共有四个参数:

第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。

第二个参数为扫描码,一般不用 设置,用0代替就行。

第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,

第四个参数一 般也是置0即可。例如:实现模拟按下i键,其中的 0x49 表示 i 键的虚拟键值。

c#移动鼠标到指定坐标并点击相关推荐

  1. python postmessage_解惑:Postmessage函数模拟鼠标单击指定坐标

    首先,我不是刻意去学习Postmessage函数,也不愿意花费很多经历去研究API.但是为了完善自己的知识和体现域学式的学习方法,顺便研究了一下这个函数. 网上有很多关于Postmessage发送消息 ...

  2. 关于Unity3D中鼠标移动指定物体的解决方案

    一.鼠标拾取物体的原理 在Unity3D当中,想要在观察面(Aspect)中拾取物体(有碰撞属性)的方法一般如下: 1.声明一个观察的摄像机.一个从摄像机原点出发的射线Ray以及一个用于检测碰撞的Ra ...

  3. php 获取鼠标的坐标,如何实时获取鼠标的当前坐标-

    本文来做一个简单的实时获取鼠标坐标的功能,在canvas动画开发中,获取鼠标的坐标,键盘的按键等等,都是常用的操作,我们就慢慢得把他们封装成一个公共库. 一.事件的兼容:function bindEv ...

  4. 根据坐标点鼠标 不移动_CAD移动鼠标时,鼠标右下角有坐标提示,怎么取消?...

    好课推荐: 1.CAD2014:点击查看2.室内&全屋:点击查看3.CAD2019:点击查看4.CAD2018:点击查看5.[bim]revit:点击查看6.室内手绘:点击查看7.CAD三维: ...

  5. QT实现图片缩放的同时标记指定坐标

    本文以我的另一篇文章<QT实现图片缩放>为基础,连接为:https://blog.csdn.net/weixin_43935474/article/details/89327314 现在有 ...

  6. python 获取屏幕颜色_Python3 获取手机屏幕指定坐标点的 RGBA 和 16 进制颜色

    # -*- coding: utf-8 -*- # @file: test.py # @author: xiaoxiao # @date : 2019/8/14 from PIL import Ima ...

  7. PYTHON鼠标记录器 一个简单的鼠标记录器 可以修改坐标和点击的时间

    PYTHON鼠标记录器 一个简单的鼠标记录器 可以修改坐标和点击的时间. 差一个定时器,如果加上定时器,估计就是解放了守在电脑边的你. 定时器版本忘了放在哪里了.先分享这个给对编程爱好的朋友,虽然我在 ...

  8. Android 获取屏幕指定坐标的颜色

    用到的API MediaProjectionManager MediaProjection VirtualDisplay ImageReader 原理:利用Android系统提供的投影功能把屏幕投影到 ...

  9. QT编写实现图片的幻灯片播放、自适应显示、缩放(以鼠标位置为中心进行缩放)、拖动、重置、显示鼠标位置像素坐标及RGB值、播放GIF动画、截图保存、批量保存、拖入文件夹遍历所有文件

    这个图片查看器功能很多,是我花了不少心思,不断优化,不断添加功能的成果: 1.能打开并显示所有常用图片格式文件,显示鼠标位置像素坐标及RGB值 2.能缩放,拖动图片,可以以鼠标为中心滚动滚轮进行缩放 ...

最新文章

  1. android中string.xml使用总结,string.xml 的作用以及意义——国际化应用
  2. To-do List
  3. 【算法基础】数据结构导论第二章-线性表.pptx
  4. 汉语是什么_为什么出国留学以及工作要考国际汉语教师资格证?
  5. JavaScript——创建对象
  6. 4行代码解决:L1-057 PTA使我精神焕发 (5分)
  7. 张景中院士:好的老师应当向学生展示数学思维的美妙
  8. 项目计划定制:项目计划划分与产品项目推进的有机结合
  9. Cookie 、Session、Token理解以及常见问题总结
  10. yii 设置时区 不生效_Java 程序处理异地机房不同时区问题
  11. 关闭TOMCAT日志的三个方法
  12. SourceOffSite使用方法
  13. [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运
  14. Java 基础学习笔记
  15. 微分方程_偏微分方程
  16. FIFA Women's World Cup France 2019™ -国际足协继海奶奶女子世足杯曲终人散,USA碰杯
  17. eNSP第五篇扩展1:vrrp over nqa,nqa探测,双重vrrp监听方法1,vrrp与nqa结合
  18. fluxion5.9 踩坑
  19. 【报告分享】2021年小红书内容营销趋势洞察-千瓜(附下载)
  20. linux命令之 whatis

热门文章

  1. Linux一键安装xrdp,如何在Linux系统Ubuntu 20.04中安装xrdp实现远程桌面连接RDP
  2. TCP的滑动窗口与拥塞窗口
  3. spring源码学习之整合Mybatis原理分析
  4. 小秘谈币:炒币资深玩家所遇到的交易恐惧
  5. TOPMOST窗口属性失效的一种场景
  6. 【FlaskMySQL】Flask连接数据库MySQL(十)
  7. 虚拟化相关概念与技术整理(1)——关于VMM类型
  8. vs2015 产品密钥
  9. Echarts5.3.2可视化案例-应用篇
  10. SpringBoot——使用拦截器拦截未登录用户