翼度科技»论坛 编程开发 .net 查看内容

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

3

主题

3

帖子

9

积分

新手上路

Rank: 1

积分
9
最近玩《星露谷物语》上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了。
虽然挺有意思,但是太肝了,入坑前请谨慎。补充一下,这个游戏应该是基于 XNA/MonoGame 写的。
这个游戏在丧失焦点的时候会自动暂停,无法自动推进,我觉得效率太低了,为了齐先生的场子,我得搞一个自动点击的东西。
不想下载软件就自己写一个吧,因为要保证游戏始终在前面,那肯定开关需要启用全局快捷键。找了一下,. NET 有一个 SharpHook (tolik.io) 就挺简单的,花几分钟写了一个,实现了功能。
SharpHook 是一个跨平台的 Hook 组件,核心基于 libuiohook
监听事件

官网的文档非常简洁易懂,我设置快捷键监听,监听按键按下。
  1. var hook = new TaskPoolGlobalHook();
  2. hook.HookEnabled += OnHookEnabled;     // EventHandler<HookEventArgs>
  3. hook.HookDisabled += OnHookDisabled;   // EventHandler<HookEventArgs>
  4. hook.KeyTyped += OnKeyTyped;           // EventHandler<KeyboardHookEventArgs>
  5. hook.Run();
复制代码
然后在事件中设置定时器启动以及停止,我目标是每隔两秒钟按鼠标左键一次。
  1. private static void OnKeyTyped(object? sender, KeyboardHookEventArgs e)
  2. {
  3.     if (e.SuppressEvent) return;
  4.     if (e.Data.KeyCode.HasFlag(KeyCode.VcSemicolon)) // ;键
  5.     {
  6.         Console.WriteLine("start timer");
  7.         _timer.Start();
  8.     }
  9.     else if (e.Data.KeyCode.HasFlag(KeyCode.VcL)) //L键
  10.     {
  11.         Console.WriteLine("stop timer");
  12.         _timer.Stop();
  13.     }
  14.     e.SuppressEvent = true;
  15. }
复制代码
模拟事件

这个库同样可以模拟鼠标和键盘的操作,我这里操作鼠标,键盘也是同理。
  1. static EventSimulator _simulator = new EventSimulator();
  2. private static void _timer_Elapsed(object? sender, System.Timers.ElapsedEventArgs e)
  3. {
  4.         _simulator.SimulateMousePress(MouseButton.Button1);
  5.         Thread.Sleep(100);
  6.         _simulator.SimulateMouseRelease(MouseButton.Button1);
  7. }
复制代码
注意,很多游戏是单独监听鼠标的按下与松开的,这样算一次完整的点击,如果中间没有设置延时,有可能识别不鼠标的动作。这个游戏就是这样,没有延时就不行。
好了,运行之后放在后台,在游戏获取焦点的时候,按";"启动,然后鼠标悬停在物品上面就能自动拿起/放下了,按“L”退出。

键位与其他

参考 Key Code Mappings | SharpHook (tolik.io) 看键名称与 Key Code。调试的时候,如果在 OnKeyTyped 事件中设置断点会有一下子非常卡,耐心一点就正常了。
另外,我 Hook 上方 F 功能键的时候一直不成功,但是 ESC 是可以正常被响应的,没有深入去研究为什么,以后真完全有必要了再看看。

来源:https://www.cnblogs.com/podolski/archive/2023/10/27/17791537.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
来自手机

举报 回复 使用道具