当前位置: 代码网 > it编程>编程语言>Asp.net > 简单实现.NET Hook与事件模拟实例

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

2024年05月18日 Asp.net 我要评论
引言最近玩《星露谷物语》上瘾,本来是看着个休闲游戏,现在玩成修仙游戏了,上百个小时浑身是肝,中午午休习惯都强行给改了。虽然挺有意思,但是太肝了,入坑前请谨慎。补充一下,这个游戏应该是基于xna/mon

引言

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

虽然挺有意思,但是太肝了,入坑前请谨慎。补充一下,这个游戏应该是基于 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事件模拟的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com