資源描述:
《淺談游戲中的模擬點擊程序.doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。
1、淺談游戲中的模擬點擊程序 游戲程序的操作不外乎兩種——鍵盤輸入控制和鼠標(biāo)輸入控制,幾乎所有游戲中都使用鼠標(biāo)來改變角色的位置和方向,本文主要是講述如何使用C#調(diào)用WindowsAPI函數(shù)實現(xiàn)鼠標(biāo)模擬操作的功能。首先通過結(jié)合FindWindow和FindWindowEx尋找到窗體的按鈕,在通過SetCursorPos或mouse_event函數(shù)操作鼠標(biāo),同時涉及到通過spy++工具獲取窗體消息的信息?! ∫?。WindowsAPI函數(shù)介紹 .NET沒有提供改變鼠標(biāo)指針位置、模擬單機操作的函數(shù),但是可以通過調(diào)用WindowsAPI函數(shù)實現(xiàn)?! 。跠llImport(“user32.
2、dll”)] staticexternboolSetCursorPos(intX,intY); 該函數(shù)用于設(shè)置鼠標(biāo)的位置,其中X和Y是相對于屏幕左上角的絕對位置。 ?。跠llImport(“user32.dll”)] staTIcexternvoidmouse_event(MouseEventFlagflags,intdx,intdy,uintdata,UIntPtrextraInfo); 該函數(shù)不僅可以設(shè)置鼠標(biāo)指針絕對位置,而且可以以相對坐標(biāo)來設(shè)置位置?! ∑渲衒lags標(biāo)志位集,指定點擊按鈕和鼠標(biāo)動作的多種情況.dx指鼠標(biāo)沿x軸絕對位置或上次鼠標(biāo)事件位置產(chǎn)生以來移動
3、的數(shù)量.dy指沿y軸的絕對位置或從上次鼠標(biāo)事件以來移動的數(shù)量.data如果flags為MOUSE_WHEEL則該值指鼠標(biāo)輪移動的數(shù)量(否則為0),正值向前轉(zhuǎn)動.extraInfo指定與鼠標(biāo)事件相關(guān)的附加32位值?! 。跠llImport(“user32.dll”)] staTIcexternIntPtrFindWindow(stringstrClass,stringstrWindow); 該函數(shù)根據(jù)類名和窗口名來得到窗口句柄,但是這個函數(shù)不能查找子窗口,也不區(qū)分大小寫。如果要從一個窗口的子窗口查找需要使用FIndWindowEX函數(shù)?! 。跠llImport(“user32
4、.dll”)] staTIcexternIntPtrFindWindowEx(IntPtrhwndParent,IntPtrhwndChildAfter, stringstrClass,stringstrWindow); 該函數(shù)獲取一個窗口的句柄,該窗口的類名和窗口名與給定的字符串相匹配,該函數(shù)查找子窗口時從排在給定的子窗口后面的下一個子窗口開始。其中參數(shù) hwnParent為要查找子窗口的父窗口句柄,若該值為NULL則函數(shù)以桌面窗口為父窗口,查找桌面窗口的所有子窗口?! wndChildAfter子窗口句柄,查找從在Z序中的下一個子窗口開始,子窗口必須為hwnPar
5、ent直接子窗口而非后代窗口,若hwnChildAfter為NULL,查找從父窗口的第一個子窗口開始。 strClass指向一個指定類名的空結(jié)束字符串或一個標(biāo)識類名字符串的成員的指針?! trWindow指向一個指定窗口名(窗口標(biāo)題)的空結(jié)束字符串。若為NULL則所有窗體全匹配?! 》祷刂担喝绻瘮?shù)成功,返回值為具有指定類名和窗口名的窗口句柄,如果函數(shù)失敗,返回值為NULL. 二。鼠標(biāo)自動點擊按鈕和查看鼠標(biāo)運行軌跡 首先創(chuàng)建一個C#工程,設(shè)計的窗體如下圖所示,同時添加TImer時間器控件: 然后添加的如下代碼,即可實現(xiàn)鼠標(biāo)模擬技術(shù)及自動操作鼠標(biāo): usingSyst
6、em; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Linq; usingSystem.Text; usingSystem.Threading.Tasks; usingSystem.Windows.Forms; //引用新命名空間 usingSystem.Runtime.InteropServices;//StructLayout namespaceMouseAction {
7、 publicpartialclassForm1:Form { publicForm1() { InitializeComponent(); } //結(jié)構(gòu)體布局本機位置 ?。跾tructLayout(LayoutKind.Sequential)] structNativeRECT { publicintleft; publicinttop; publicintright; publicintbottom; } //將枚舉作為位域處理 ?。跢lags] enumM