Unity 模拟鼠标点击操作
有个奇奇怪怪的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 模拟鼠标点击操作相关推荐
- php 模拟鼠标点击,Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)...
Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...
- Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例)
Python全局模拟鼠标点击操作(以至善网无聊评价点击作为案例) 环境 python3 依赖 PyAutoGUI 简介 PyAutoGUI是一个纯Python的GUI自动化工具,其目的是可以用程序自动 ...
- selenium模拟鼠标和键盘操作的基本方法
前言 前面已经把环境搭建好了,这从这篇开始,正式学习selenium的webdriver框架.我们平常说的 selenium自动化,其实它并不是类似于QTP之类的有GUI界面的可视化工具,我们要学的是 ...
- python实现键盘自动输入_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...
- python模拟鼠标点击和键盘输入的操作_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...
- python操作键盘输入中文_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不 ...
- python控制鼠标移动并点击_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 安装不成 ...
- python模拟键盘打字_python模拟鼠标点击和键盘输入的操作
所有代码都是网上百度出来的,通过个人实践找到适合自己的. 采用的python 库是 pymouse.pykeyboard 安装时直接pip安装的,pip install PyUserInput 实现了 ...
- python模拟鼠标键盘操作_人生苦短我用Python——模拟鼠标点击和键盘输入的操作...
通过Python可以模拟鼠标点击和键盘输入的操作,进而可以实现一些比较有趣的功能,例如游戏挂机.自动发消息等. 本文以自动发消息为例,实现该功能,通过该代码可以自动往QQ.微信发送任意内容.首先考虑想 ...
最新文章
- Combiner合并案例
- 动态代理以及对应Spring中AOP源码分析
- 11(maven+SSH)网上商城项目实战之Freemarker 页面静态化
- STMF4x 固件库V1.25.0
- 【2050 Programming Competition - 2050 一万人码 】非官方部分题解(HDU)
- 四元数插值方法Slerp/Squad/Spicv/Sping知识总结思维导图
- Leetcode每日一题:463.island-perimeter(岛屿的周长)
- 我需要完全理解这部分代码才能确保它能够正常工作,如果由我来修复代码中的问题,我是不会这么写的,因此希望你也不要这么来写(转)...
- SpringSecurity入门到入土教程_2 Oauth教程
- Excel 如何锁定表头
- 计算机桌面显示保护眼睛设置,教你把电脑屏幕设置成可以保护眼睛的颜色
- 【秋招面试】面试准备(一面准备)
- 一帧1920*1080的画面有多少比特,需要多大带宽观看是才不会卡顿?
- a洋发卡网sadnt模板美化
- 南京航空航天大学计算机考研经验分享,南京航空航天大学计算机考研试题.pdf...
- Python 基础知识自检,你离深入掌握 Python 还有多远
- ios 事件穿透的原因和解决方法
- Canonical Juju 使用笔记
- IOS中删除文件和文件夹
- 深度学习训练(优化)参数的玄学解释