简单实现.NET Hook与事件模拟实例

 更新时间:2023年10月27日 14:09:04   作者:波多尔斯基  
这篇文章主要为大家介绍了简单实现.NET Hook与事件模拟实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

引言

最近玩《星露谷物语》上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了。

虽然挺有意思,但是太肝了,入坑前请谨慎。补充一下,这个游戏应该是基于 XNA/MonoGame 写的。

这个游戏在丧失焦点的时候会自动暂停,无法自动推进,我觉得效率太低了,为了齐先生的场子,我得搞一个自动点击的东西。

不想下载软件就自己写一个吧,因为要保证游戏始终在前面,那肯定开关需要启用全局快捷键。找了一下,. NET 有一个 SharpHook (tolik.io) 就挺简单的,花几分钟写了一个,实现了功能。

SharpHook 是一个跨平台的 Hook 组件,核心基于 libuiohook

监听事件

官网的文档非常简洁易懂,我设置快捷键监听,监听按键按下。

var hook = new TaskPoolGlobalHook();
hook.HookEnabled += OnHookEnabled;     // EventHandler<HookEventArgs>
hook.HookDisabled += OnHookDisabled;   // EventHandler<HookEventArgs>
hook.KeyTyped += OnKeyTyped;           // EventHandler<KeyboardHookEventArgs>
hook.Run();

然后在事件中设置定时器启动以及停止,我目标是每隔两秒钟按鼠标左键一次。

private static void OnKeyTyped(object? sender, KeyboardHookEventArgs e)
{
    if (e.SuppressEvent) return;
    if (e.Data.KeyCode.HasFlag(KeyCode.VcSemicolon)) // ;键
    {
        Console.WriteLine("start timer");
        _timer.Start();
    }
    else if (e.Data.KeyCode.HasFlag(KeyCode.VcL)) //L键
    {
        Console.WriteLine("stop timer");
        _timer.Stop();
    }
    e.SuppressEvent = true;
}

模拟事件

这个库同样可以模拟鼠标和键盘的操作,我这里操作鼠标,键盘也是同理。

static EventSimulator _simulator = new EventSimulator();
private static void _timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
{
	_simulator.SimulateMousePress(MouseButton.Button1);
	Thread.Sleep(100);
	_simulator.SimulateMouseRelease(MouseButton.Button1);
}

注意,很多游戏是单独监听鼠标的按下与松开的,这样算一次完整的点击,如果中间没有设置延时,有可能识别不鼠标的动作。这个游戏就是这样,没有延时就不行。

好了,运行之后放在后台,在游戏获取焦点的时候,按";"启动,然后鼠标悬停在物品上面就能自动拿起/放下了,按“L”退出。

键位与其他

参考 Key Code Mappings | SharpHook (tolik.io) 看键名称与 Key Code。调试的时候,如果在 OnKeyTyped 事件中设置断点会有一下子非常卡,耐心一点就正常了。

另外,我 Hook 上方 F 功能键的时候一直不成功,但是 ESC 是可以正常被响应的,没有深入去研究为什么,以后真完全有必要了再看看。

以上就是简单实现.NET Hook与事件模拟实例的详细内容,更多关于.NET Hook事件模拟的资料请关注脚本之家其它相关文章!

相关文章

  • 设计windows phone页面主题

    设计windows phone页面主题

    这篇文章主要介绍了设计windows phone页面主题,需要的朋友可以参考下
    2015-07-07
  • ASP.NET Core使用功能开关控制路由访问操作(续)

    ASP.NET Core使用功能开关控制路由访问操作(续)

    这篇文章主要介绍了ASP.NET Core使用功能开关控制路由访问操作的(续),上一篇文章我们已经介绍过一部份该相关内容,​​在本文,我们可以判断当前路由地址是否为调试地址,让评估返回真,需要的小伙伴可以参考一下
    2022-02-02
  • .net程序开发IOC控制反转和DI依赖注入详解

    .net程序开发IOC控制反转和DI依赖注入详解

    这篇文章主要为大家介绍了.net程序开发IOC控制反转和DI依赖注入示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • ASP.NET Core 依赖注入详细

    ASP.NET Core 依赖注入详细

    这篇文章主要介绍ASP.NET Core 依赖注入,ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,这些组件会以接口的形式标准化,这些组件就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使用容器提供所需的服务,下面我们就来详细了解一下
    2021-10-10
  • ASP.NET Web API教程 创建Admin视图详细介绍

    ASP.NET Web API教程 创建Admin视图详细介绍

    现在我们转入客户端,并添加一个能够使用从Admin控制器而来的数据的页面。通过给控制器发送AJAX请求的方式,该页面将允许用户创建、编辑,或删除产品
    2012-11-11
  • .NET新能源汽车锂电池检测程序UI挂死问题分析

    .NET新能源汽车锂电池检测程序UI挂死问题分析

    这篇文章主要为大家介绍了.NET新能源汽车锂电池检测程序UI挂死问题分析 ,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • 利用.NET 开发服务器 应用管理工具

    利用.NET 开发服务器 应用管理工具

    这篇文章主要介绍如何利用.NET 开发一个应用管理工具的服务器,文章回先聊背景接着其是哟美好方法,需要的的小伙伴可以参考一下小面文章的具体内容
    2021-10-10
  • ASP.NET通过Web.config实现验证账号密码是否正确进行登录

    ASP.NET通过Web.config实现验证账号密码是否正确进行登录

    本文是通过authentication(认证访问者) 和 authorization( 访问权限),来实现一个简单的判断用户账号密码是否正确,需要的朋友可以参考下
    2021-09-09
  • ASP.NET Core 中间件的使用之全局异常处理机制

    ASP.NET Core 中间件的使用之全局异常处理机制

    我们今天这篇文章就来说说代码异常问题怎么快速定位,减少不必要的时间浪费。异常是一种运行时错误,当异常没有得到适当的处理,很可能会导致你的程序意外终止。下面雄安边将详细介绍,需要的朋友可以参考下
    2021-09-09
  • asp.net core使用DevExtreme20将int列转为checkbox方法示例

    asp.net core使用DevExtreme20将int列转为checkbox方法示例

    这篇文章主要为大家介绍了asp.net core使用DevExtreme20将int列转为checkbox方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08

最新评论