Files
better-genshin-impact/BetterGenshinImpact/Core/Script/Dependence/GlobalMethod.cs
2024-10-03 16:24:56 +08:00

153 lines
3.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using BetterGenshinImpact.Core.Simulator;
using BetterGenshinImpact.GameTask;
using BetterGenshinImpact.GameTask.Model.Area;
using BetterGenshinImpact.Helpers;
using System;
using System.Threading.Tasks;
using BetterGenshinImpact.GameTask.Common;
using Vanara.PInvoke;
namespace BetterGenshinImpact.Core.Script.Dependence;
public class GlobalMethod
{
public static async Task Sleep(int millisecondsTimeout)
{
await Task.Delay(millisecondsTimeout, CancellationContext.Instance.Cts.Token);
}
#region
public static void KeyDown(string key)
{
Simulation.SendInput.Keyboard.KeyDown(ToVk(key));
}
public static void KeyUp(string key)
{
Simulation.SendInput.Keyboard.KeyUp(ToVk(key));
}
public static void KeyPress(string key)
{
Simulation.SendInput.Keyboard.KeyPress(ToVk(key));
}
private static User32.VK ToVk(string key)
{
try
{
return User32Helper.ToVk(key);
}
catch
{
throw new ArgumentException($"键盘编码必须是VirtualKeyCodes枚举中的值当前传入的 {key} 不合法");
}
}
#endregion
#region
private static int _gameWidth = 1920;
private static int _gameHeight = 1080;
private static double _dpi = 1;
public static void SetGameMetrics(int width, int height, double dpi = 1)
{
// 必须16:9 的分辨率
if (width * 9 != height * 16)
{
throw new ArgumentException("游戏分辨率必须是16:9的分辨率");
}
_gameWidth = width;
_gameHeight = height;
_dpi = dpi;
}
public static void MoveMouseBy(int x, int y)
{
var realDpi = TaskContext.Instance().DpiScale;
x = (int)(x * realDpi / _dpi);
y = (int)(y * realDpi / _dpi);
Simulation.SendInput.Mouse.MoveMouseBy(x, y);
}
public static void MoveMouseTo(int x, int y)
{
if (x < 0 || x > _gameWidth || y < 0 || y > _gameHeight)
{
throw new ArgumentException("鼠标坐标超出游戏窗口范围");
}
var captureAreaRect = TaskContext.Instance().SystemInfo.CaptureAreaRect;
var scale = captureAreaRect.Width * 1.0 / _gameWidth;
DesktopRegion.DesktopRegionMove(captureAreaRect.X + x * scale, captureAreaRect.Y + y * scale);
Simulation.SendInput.Mouse.MoveMouseTo(x, y);
}
public static void Click(int x, int y)
{
MoveMouseTo(x, y);
Simulation.SendInput.Mouse.LeftButtonClick();
}
public static void LeftButtonClick()
{
Simulation.SendInput.Mouse.LeftButtonClick();
}
public static void LeftButtonDown()
{
Simulation.SendInput.Mouse.LeftButtonDown();
}
public static void LeftButtonUp()
{
Simulation.SendInput.Mouse.LeftButtonUp();
}
public static void RightButtonClick()
{
Simulation.SendInput.Mouse.RightButtonClick();
}
public static void RightButtonDown()
{
Simulation.SendInput.Mouse.RightButtonDown();
}
public static void RightButtonUp()
{
Simulation.SendInput.Mouse.RightButtonUp();
}
public static void MiddleButtonClick()
{
Simulation.SendInput.Mouse.MiddleButtonClick();
}
public static void MiddleButtonDown()
{
Simulation.SendInput.Mouse.MiddleButtonDown();
}
public static void MiddleButtonUp()
{
Simulation.SendInput.Mouse.MiddleButtonUp();
}
#endregion
#region
public static ImageRegion CaptureGameRegion()
{
return TaskControl.CaptureToRectArea();
}
#endregion
}