簡單實現(xiàn).NET?Hook與事件模擬實例
引言
最近玩《星露谷物語》上癮,本來是看著個休閑游戲,現(xiàn)在玩成修仙游戲了,上百個小時渾身是肝,中午午休習(xí)慣都強行給改了。
雖然挺有意思,但是太肝了,入坑前請謹(jǐn)慎。補充一下,這個游戲應(yīng)該是基于 XNA/MonoGame
寫的。
這個游戲在喪失焦點的時候會自動暫停,無法自動推進,我覺得效率太低了,為了齊先生的場子,我得搞一個自動點擊的東西。
不想下載軟件就自己寫一個吧,因為要保證游戲始終在前面,那肯定開關(guān)需要啟用全局快捷鍵。找了一下,. NET 有一個 SharpHook (tolik.io) 就挺簡單的,花幾分鐘寫了一個,實現(xiàn)了功能。
SharpHook
是一個跨平臺的 Hook 組件,核心基于 libuiohook
監(jiān)聽事件
官網(wǎng)的文檔非常簡潔易懂,我設(shè)置快捷鍵監(jiān)聽,監(jiān)聽按鍵按下。
var hook = new TaskPoolGlobalHook(); hook.HookEnabled += OnHookEnabled; // EventHandler<HookEventArgs> hook.HookDisabled += OnHookDisabled; // EventHandler<HookEventArgs> hook.KeyTyped += OnKeyTyped; // EventHandler<KeyboardHookEventArgs> hook.Run();
然后在事件中設(shè)置定時器啟動以及停止,我目標(biāo)是每隔兩秒鐘按鼠標(biāo)左鍵一次。
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; }
模擬事件
這個庫同樣可以模擬鼠標(biāo)和鍵盤的操作,我這里操作鼠標(biāo),鍵盤也是同理。
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); }
注意,很多游戲是單獨監(jiān)聽鼠標(biāo)的按下與松開的,這樣算一次完整的點擊,如果中間沒有設(shè)置延時,有可能識別不鼠標(biāo)的動作。這個游戲就是這樣,沒有延時就不行。
好了,運行之后放在后臺,在游戲獲取焦點的時候,按";"啟動,然后鼠標(biāo)懸停在物品上面就能自動拿起/放下了,按“L”退出。
鍵位與其他
參考 Key Code Mappings | SharpHook (tolik.io) 看鍵名稱與 Key Code
。調(diào)試的時候,如果在 OnKeyTyped
事件中設(shè)置斷點會有一下子非???,耐心一點就正常了。
另外,我 Hook 上方 F 功能鍵的時候一直不成功,但是 ESC 是可以正常被響應(yīng)的,沒有深入去研究為什么,以后真完全有必要了再看看。
以上就是簡單實現(xiàn).NET Hook與事件模擬實例的詳細內(nèi)容,更多關(guān)于.NET Hook事件模擬的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ASP.NET?Core使用功能開關(guān)控制路由訪問操作(續(xù))
這篇文章主要介紹了ASP.NET?Core使用功能開關(guān)控制路由訪問操作的(續(xù)),上一篇文章我們已經(jīng)介紹過一部份該相關(guān)內(nèi)容,??在本文,我們可以判斷當(dāng)前路由地址是否為調(diào)試地址,讓評估返回真,需要的小伙伴可以參考一下2022-02-02.net程序開發(fā)IOC控制反轉(zhuǎn)和DI依賴注入詳解
這篇文章主要為大家介紹了.net程序開發(fā)IOC控制反轉(zhuǎn)和DI依賴注入示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-11-11ASP.NET Web API教程 創(chuàng)建Admin視圖詳細介紹
現(xiàn)在我們轉(zhuǎn)入客戶端,并添加一個能夠使用從Admin控制器而來的數(shù)據(jù)的頁面。通過給控制器發(fā)送AJAX請求的方式,該頁面將允許用戶創(chuàng)建、編輯,或刪除產(chǎn)品2012-11-11利用.NET 開發(fā)服務(wù)器 應(yīng)用管理工具
這篇文章主要介紹如何利用.NET 開發(fā)一個應(yīng)用管理工具的服務(wù)器,文章回先聊背景接著其是喲美好方法,需要的的小伙伴可以參考一下小面文章的具體內(nèi)容2021-10-10ASP.NET通過Web.config實現(xiàn)驗證賬號密碼是否正確進行登錄
本文是通過authentication(認(rèn)證訪問者) 和 authorization( 訪問權(quán)限),來實現(xiàn)一個簡單的判斷用戶賬號密碼是否正確,需要的朋友可以參考下2021-09-09asp.net core使用DevExtreme20將int列轉(zhuǎn)為checkbox方法示例
這篇文章主要為大家介紹了asp.net core使用DevExtreme20將int列轉(zhuǎn)為checkbox方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08