端游龙之谷有热键一键关闭游戏进程实现紧急掉线的需求(圈内称秒掉器)。国服更新客户端从32位变64位后以前的秒掉器不可用。2021年4月自己无C#基础花一周实现了该功能。前后迭代了几个版本,见B站该专栏的记录。简易秒掉器界面如下:
由于是我自己的专栏,直接将关键内容转载至此处如下:
-
第一版:.net Core 3.1 WPF和进程管理API+ RegisterHotKey
这是模仿好友发给我的秒掉写的,写好之后发现要装.net Core或者.net Framework的运行时库,其他人使用起来不便。第一、第二版本都写好后测试,F4秒掉只能在龙之谷游戏窗口没有获得焦点时生效。后续发现是因为用user32.dll中的RegisterHotKey这个API的局限。 -
第二版:Windows窗体和进程管理API + RegisterHotKey
用Windows自带的GUI组件,不用装任何额外的库,问题跟第一版一样,F4秒掉只能在龙之谷游戏窗口没有获得焦点时生效。而且这个版本跟其他两版相比,感受到从按下F4到游戏秒退这段时间有较明显的延时。估计是进程管理API之间的性能差异导致的。 -
第三版:.net Framework 4.8 WPF和进程管理API + SetWindowsHookEx
支持全局F4热键秒掉,包括龙之谷游戏进程获得焦点时。唯一的缺点是不能连续快速按F4,会导致系统假死,一段时间后秒掉程序被系统强制移除钩子并强制退出。由于初次接触钩子,不明白是何原因造成如此低下的性能,但是目前够用,毕竟开了秒掉也不会没事狂按F4,不用秒掉退出秒掉程序就行。
———————————————————以上为转载—————————————————————
最终版本摒弃热键的实现思路,直接调用底层API监听键盘输入,稳定。代码公布在Gitee码云 代码未经整理直接将Visual Studio所有文件打包上传。由于时间较为久远,实现时基于应用,本文技术描述不一定准确。
总结:前三版都是通过百度搜索到的思路,找来找去都是这些。最终版本是独立思考+亲自查阅微软API+英文网站检索得到的结果。英文基础足够的情况下,编程遇到问题还是应该优先找找Stackoverflow等英文网站。