mirror of
https://github.com/babalae/better-genshin-impact.git
synced 2026-04-05 11:25:20 +08:00
96 lines
2.5 KiB
C#
96 lines
2.5 KiB
C#
using BetterGenshinImpact.GameTask;
|
|
using Fischless.HotkeyCapture;
|
|
using Gma.System.MouseKeyHook;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Threading.Tasks;
|
|
using System.Windows.Forms;
|
|
using Vanara.PInvoke;
|
|
|
|
namespace BetterGenshinImpact.Model;
|
|
|
|
public class MouseHook
|
|
{
|
|
public static Dictionary<MouseButtons, MouseHook> AllMouseHooks = [];
|
|
|
|
public event EventHandler<KeyPressedEventArgs>? MousePressed = null;
|
|
|
|
public event EventHandler<KeyPressedEventArgs>? MouseDownEvent = null;
|
|
|
|
public event EventHandler<KeyPressedEventArgs>? MouseUpEvent = null;
|
|
|
|
public bool IsHold { get; set; }
|
|
|
|
public MouseButtons BindMouse { get; set; } = MouseButtons.Left;
|
|
|
|
public bool IsPressed { get; set; }
|
|
|
|
public void MouseDown(object? sender, MouseEventExtArgs e)
|
|
{
|
|
if (!SystemControl.IsGenshinImpactActive())
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (e.Button != MouseButtons.Left && e.Button != MouseButtons.None && e.Button == BindMouse)
|
|
{
|
|
IsPressed = true;
|
|
MouseDownEvent?.Invoke(this, new KeyPressedEventArgs(User32.HotKeyModifiers.MOD_NONE, Keys.None));
|
|
if (IsHold)
|
|
{
|
|
Task.Run(() => RunAction(e));
|
|
}
|
|
else
|
|
{
|
|
MousePressed?.Invoke(this, new KeyPressedEventArgs(User32.HotKeyModifiers.MOD_NONE, Keys.None));
|
|
IsPressed = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 长按持续执行
|
|
/// </summary>
|
|
/// <param name="e"></param>
|
|
private void RunAction(MouseEventExtArgs e)
|
|
{
|
|
lock (this)
|
|
{
|
|
while (IsPressed)
|
|
{
|
|
MousePressed?.Invoke(this, new KeyPressedEventArgs(User32.HotKeyModifiers.MOD_NONE, Keys.None));
|
|
}
|
|
}
|
|
}
|
|
|
|
public void MouseUp(object? sender, MouseEventExtArgs e)
|
|
{
|
|
if (e.Button != MouseButtons.Left && e.Button != MouseButtons.None && e.Button == BindMouse)
|
|
{
|
|
IsPressed = false;
|
|
if (SystemControl.IsGenshinImpactActive())
|
|
{
|
|
MouseUpEvent?.Invoke(this, new KeyPressedEventArgs(User32.HotKeyModifiers.MOD_NONE, Keys.None));
|
|
}
|
|
}
|
|
}
|
|
|
|
public void RegisterHotKey(MouseButtons mouseButton)
|
|
{
|
|
BindMouse = mouseButton;
|
|
AllMouseHooks.Add(mouseButton, this);
|
|
}
|
|
|
|
public void UnregisterHotKey()
|
|
{
|
|
IsPressed = false;
|
|
IsHold = false;
|
|
AllMouseHooks.Remove(BindMouse);
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
UnregisterHotKey();
|
|
}
|
|
}
|