有个奇奇怪怪的BUG,需要定时模拟鼠标点击

就想到了这个骚操作。

C#本身带的类库中没有关于鼠标操作的函数库,需要引用微软的dll。
重点需要引入user32.dll,可以在C:\Windows\System32文件夹中找到,最好不要用网上下的,用本机的,我就吃了这个亏。

unity引入all

把dll放到unityAssets/Plugins文件夹下,

打包时系统自动把dll打包到

代码

using System;public class MouseSimulater
{#region DLLs[System.Runtime.InteropServices.DllImport("user32.dll")]private static extern int SetCursorPos(int x, int y);[System.Runtime.InteropServices.DllImport("user32.dll")]private static extern void mouse_event(MouseEventFlag dwFlags, int dx, int dy, uint dwData, UIntPtr dwExtraInfo);// 方法参数说明// VOID mouse_event(//     DWORD dwFlags,         // motion and click options//     DWORD dx,              // horizontal position or change//     DWORD dy,              // vertical position or change//     DWORD dwData,          // wheel movement//     ULONG_PTR dwExtraInfo  // application-defined information// );[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}#endregion// Unity屏幕坐标从左下角开始,向右为X轴,向上为Y轴// Windows屏幕坐标从左上角开始,向右为X轴,向下为Y轴/// <summary>/// 移动鼠标到指定位置(使用Unity屏幕坐标而不是Windows屏幕坐标)/// </summary>public static bool MoveTo(float x, float y){if (x < 0 || y < 0 || x > UnityEngine.Screen.width || y > UnityEngine.Screen.height)return true;if (!UnityEngine.Screen.fullScreen){UnityEngine.Debug.LogError("只能在全屏状态下使用!");return false;}// SetCursorPos 函数//把光标移到屏幕的指定位置。(ps:是整个屏幕的坐标,相对于屏幕左上角的绝对位置)//参数//X 指定光标的新的X坐标,以屏幕坐标表示。//Y 指定光标的新的Y坐标,以屏幕坐标表示。//返回值//如果成功,返回非0值//如果失败,返回值是0SetCursorPos((int)x, (int)(UnityEngine.Screen.height - y));return true;}// 左键单击public static void LeftClick(float x = -1, float y = -1){if (MoveTo(x, y)){//mouse_event 函数//综合鼠标移动和按钮点击。该方法包含鼠标左右移动及点击操作。//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应为零。//dwExtraInfo//指定与鼠标事件相关的附加32位值。应用程序调用函数GetMessageExtraInfo来获得此附加信息mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);}}// 右键单击public static void RightClick(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.RightDown, 0, 0, 0, UIntPtr.Zero);mouse_event(MouseEventFlag.RightUp, 0, 0, 0, UIntPtr.Zero);}}// 中键单击public static void MiddleClick(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.MiddleDown, 0, 0, 0, UIntPtr.Zero);mouse_event(MouseEventFlag.MiddleUp, 0, 0, 0, UIntPtr.Zero);}}// 左键按下public static void LeftDown(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.LeftDown, 0, 0, 0, UIntPtr.Zero);}}// 左键抬起public static void LeftUp(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.LeftUp, 0, 0, 0, UIntPtr.Zero);}}// 右键按下public static void RightDown(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.RightDown, 0, 0, 0, UIntPtr.Zero);}}// 右键抬起public static void RightUp(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.RightUp, 0, 0, 0, UIntPtr.Zero);}}// 中键按下public static void MiddleDown(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.MiddleDown, 0, 0, 0, UIntPtr.Zero);}}// 中键抬起public static void MiddleUp(float x = -1, float y = -1){if (MoveTo(x, y)){mouse_event(MouseEventFlag.MiddleUp, 0, 0, 0, UIntPtr.Zero);}}// 滚轮滚动public static void ScrollWheel(float value){mouse_event(MouseEventFlag.Wheel, 0, 0, (uint)value, UIntPtr.Zero);}
}

Unity简单调用

 // 模拟鼠标左键按下MouseSimulater.LeftClick(450,850);

参数释义

参考

https://www.cnblogs.com/falcon-fei/p/11396740.html
https://blog.csdn.net/keneyr/article/details/98079695
https://blog.csdn.net/qq_21397217/article/details/78488072

Unity 模拟鼠标点击操作相关推荐

  1. php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...

    Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...

  2. Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)

    Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...

  3. selenium模拟鼠标和键盘操作的基本方法

    前言 前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是 ...

  4. python实现键盘自动输入_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...

    通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...

  5. python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...

  6. python操作键盘输入中文_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...

  7. python控制鼠标移动并点击_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不成 ...

  8. python模拟键盘打字_python模拟鼠标点击和键盘输入的操作

    所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 实现了 ...

  9. python模拟鼠标键盘操作_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...

    通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...

最新文章

  1. Combiner合并案例
  2. 动态代理以及对应Spring中AOP源码分析
  3. 11(maven+SSH)网上商城项目实战之Freemarker 页面静态化
  4. STMF4x 固件库V1.25.0
  5. 【2050 Programming Competition - 2050 一万人码 】非官方部分题解(HDU)
  6. 四元数插值方法Slerp/Squad/Spicv/Sping知识总结思维导图
  7. Leetcode每日一题:463.island-perimeter(岛屿的周长)
  8. 我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写(转)...
  9. SpringSecurity入门到入土教程_2 Oauth教程
  10. Excel 如何锁定表头
  11. 计算机桌面显示保护眼睛设置,教你把电脑屏幕设置成可以保护眼睛的颜色
  12. 【秋招面试】面试准备(一面准备)
  13. 一帧1920*1080的画面有多少比特,需要多大带宽观看是才不会卡顿?
  14. a洋发卡网sadnt模板美化
  15. 南京航空航天大学计算机考研经验分享,南京航空航天大学计算机考研试题.pdf...
  16. Python 基础知识自检,你离深入掌握 Python 还有多远
  17. ios 事件穿透的原因和解决方法
  18. Canonical Juju 使用笔记
  19. IOS中删除文件和文件夹
  20. 深度学习训练(优化)参数的玄学解释

热门文章

  1. 富含叶黄素的食物 - 眼睛的营养补充剂
  2. Android 主题切换(theme),语种切换,动态获取自定义属性(attr)值
  3. JS中window.showModalDialog()参数及方法
  4. word简历里如何添加新的一页
  5. 原生js实现简化版幸运大转盘
  6. mac上好用的菜单栏管理工具Bartender 4
  7. 利用Open 3D建立三维模型
  8. Android彩信介绍
  9. 黑莓安装HANDBASE数据库情况
  10. 51单片机基础之DS18B20温度传感器