有个奇奇怪怪的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值
//如果失败,返回值是0
SetCursorPos((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.toymoban.com/news/detail-755159.html
参考
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文章来源地址https://www.toymoban.com/news/detail-755159.html
到了这里,关于Unity 模拟鼠标点击操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!