C#控制鼠标动作
可以通过两个函数操作鼠标:

    [DllImport("user32.dll")]   static extern bool SetCursorPos(int X, int Y);   [DllImport("user32.dll")]   static extern void mouse_event(MouseEventFlag flags, int dx, int dy, uint data, UIntPtr extraInfo);   [Flags]   enum MouseEventFlag : uint  {   Move = 0x0001,   LeftDown = 0x0002,   LeftUp = 0x0004,   RightDown = 0x0008,   RightUp = 0x0010,   MiddleDown = 0x0020,   MiddleUp = 0x0040,   XDown = 0x0080,   XUp = 0x0100,   Wheel = 0x0800,   VirtualDesk = 0x4000,   Absolute = 0x8000   }

SetCursorPos使鼠标移动到指定位置;mouse_event使用MouseEventFlag枚举中的Move,也可以使鼠标移动。

mouse_event中使用不同的枚举值可以模拟不同的鼠标事件。

值得注意的是有几点:

  1. 我们不能用mouse_event(MouseEventFlag.LeftDown, 10, 10, 0, UIntPtr.Zero);去模拟在(10, 10)处的左键事件,我们需要把这步拆成两步:

第一步:移动鼠标到(10,10)处,用SetCursorPos(10, 10);

第二步:触发左键,用mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);

本质上是两步的事件,不能把window API 想的太聪明,认为它会自动跑到(10,10)处,再左键

  1. MouseEventFlag的枚举值可以多个一起用,使用 | 操作符

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

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

  1. MouseEventFlag中有个Absolute枚举,如果没指定Absolute, 则mouse_event的操作是相对于上次鼠标所在的位置;如果指定了Absolute,则是相对于整个屏幕坐标的位置。

这里要注意,指定Absolute,鼠标的坐标会被约束在[0, 65535]之间。0即对应屏幕左,65535即对应屏幕右下角。

MSDN原话如下:

If MOUSEEVENTF_ABSOLUTE value is specified, dx and dy contain normalized absolute coordinates between 0 and 65,535. The event procedure maps these coordinates onto the display surface. Coordinate (0,0) maps onto the upper-left corner of the display surface, (65535,65535) maps onto the lower-right corner.

所以模拟在(10, 10)处的左键,代码应改为:

mouse_event(MOUSEEVENTF_LEFTDOWN, 10 * 65536 / Screen.PrimaryScreen.Bounds.Width, 10 * 65536 / Screen.PrimaryScreen.Bounds.Height, 0, 0);

如果显示器是一拖二的,想在第二个屏上使用mouse_event,就不能用Screen.PrimaryScreen了

转: C#控制鼠标动作相关推荐

  1. 如何控制鼠标和键盘的操作

    3.8如何控制鼠标和键盘的操作 [问题提出] 要实现远程控制,对受控方鼠标和键盘的控制必不可少. [分析比较] 要实现对鼠标和键盘的控制,必须模拟鼠标和键盘的动作.要模拟鼠标和键盘的动作有两种方法: ...

  2. python的pynput模块控制鼠标、键盘和监听鼠标、键盘事件

    前言 本来在做图形界面时想用监听键盘的方式来实现,快捷键功能的.运用多线程一个线程是运行图形界面,另一个线程监听键盘的动作.可使用的时候发现不太协调,两个进程虽然都能运行但是图形界面会有时卡住,看了文 ...

  3. 【Python】实现键盘鼠标动作录制和执行的小工具

    突发奇想做一个可以实现鼠标键盘操作录制,并可以回放操作的小工具.依托于pynput模块来实现鼠标键盘的控制,tkinter来实现图形界面的绘制.分为以下几个步骤: 一 录制(记录过程,并将用户的操作保 ...

  4. python控制软件点击_Python小程序 控制鼠标循环点击代码实例

    Python小程序 控制鼠标循环点击代码实例 这篇文章主要介绍了Python小程序 控制鼠标循环点击代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以 ...

  5. 用钩子函数实现鼠标动作录制

    在日常的一些操作中,会遇到重复的鼠标动作,类似按键精灵的软件就会成为比较好的助手.这里借助网上查找的资料自己实现了一个简单的鼠标动作录制软件. 完成界面如图: 录制 录制鼠标动作首先需要截获.钩子函数 ...

  6. python 控制鼠标点击需要100ms为什么_用 Python3 和 OpenCV 替我玩一玩微信小游戏 — 跳一跳 (这算外挂么)...

    0 瞎弄 我知道你们喜欢先看效果 手残的我,始终跳不过你们这些超过 50 分的大佬.想起最近在用 Python 学习 ML (Mechine Learning, 机器学习) ,怎么用没学会,倒是里面神 ...

  7. python怎么控制鼠标_Python使用pyautogui控制鼠标键盘

    安装pyautogui模块 在 Windows 上,不需要安装其他模块. 在 OS X 上,运行 sudo pip3 install pyobjc-framework-Quartz,sudo pip3 ...

  8. python调用键盘_Python直接控制鼠标键盘

    Python直接控制鼠标键盘 之前因为期末的原因已经很久没写博客了,今天博主发现一个好玩的模块PyAutoGUI,借助它可以使用Python脚本直接控制键盘鼠标,感觉可以解决很多无聊的机械运动.这里记 ...

  9. Kinect开发教程四:用Kinect控制鼠标玩水果忍者PC版

    最近Kinect连接Xbox玩水果忍者的视频非常红火,可惜小斤只有本本和Kinect,没法玩Xbox上的体感游戏.幸运的是,寻寻觅觅后,小斤发现水果忍者有PC版本,既然上一个教程我们已经可以让Kine ...

最新文章

  1. 温故而知新-面向对象的PHP
  2. shell -- shift用法
  3. etcdctl命令查询etcd信息
  4. 火山引擎视频云:从toC到toB,如何将最好的技术开放出去
  5. 如何优雅的升级内核?
  6. elk查询nginx日志响应时间
  7. 为什么我们公司强制弃坑Fastjson了?主推...
  8. ExecutorService中submit和execute、Runnable和Callable
  9. 与Amnon Shashua的1小时:详解Mobileye自动驾驶进阶之路...
  10. 常见非功能性需求的描述案例
  11. typescript 中函数参数为对象如何效验
  12. 细说自动筛选和高级筛选通过VBA快速文本筛选
  13. supermap idesktop 许可更新方案
  14. 华为服务器型号大全rh2288h,华为服务器 RH2288H V3 12*3.5盘位 E5-2680 v4*2 16GB*8 6000G*3 R5 750W*2 4*GE.....
  15. Springboot高校学生实习档案管理毕业设计-附源码221508
  16. cad lisp 示坡线_示坡线画法图文教程
  17. 苹果 macOS 13 开发者预览版 Beta 11(内部版本号:22A5373b)发布
  18. 知乎问 想找一个linux培训机构,目前看千峰、黑马、达内 北大青鸟等机构,请问哪个好一点?
  19. 图文详解如何从官网下载Hadoop安装包
  20. 固态硬盘无法识别,怎么办?4招教您解决!

热门文章

  1. HTML背景渐变圆圈,CSS3 基础(1)——边框圆角背景渐变
  2. vue cube ui cube-tab-bar
  3. 基于JavaWeb的电影网站的设计与实现
  4. mpython掌控板编程_MicroPython动手做(20)——掌控板之三轴加速度
  5. vs2017手动安装插件
  6. Linux之strsep函数
  7. BCELoss BCEWithLogitsLoss以及参数weight
  8. excel/csv文件单页最大能存多少行呢?
  9. 求解显示常微分方程MATLAB,用matlab求解常微分方程
  10. Flowable6.5框架遗留的新旧bug