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

2024-03-04 0 233
目录
  • 引言
  • 监听事件
  • 模拟事件
  • 键位与其他

引言

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

虽然挺有意思,但是太肝了,入坑前请谨慎。补充一下,这个游戏应该是基于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”退出。

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

键位与其他

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

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

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

您可能感兴趣的文章:

  • php 模拟 asp.net webFrom 按钮提交事件实例
  • php 模拟 asp.net webFrom 按钮提交事件的思路及代码
  • asp.net js模拟Button点击事件
  • ASP.NET中RadioButtonList绑定后台数据后触发点击事件
  • asp.net中c#自定义事件的实现方法详解

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悠久资源 ASP.NET 简单实现.NET Hook与事件模拟实例 https://www.u-9.cn/biancheng/aspnet/182949.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务