VB模擬按鍵終極教程_第1頁
VB模擬按鍵終極教程_第2頁
VB模擬按鍵終極教程_第3頁
VB模擬按鍵終極教程_第4頁
VB模擬按鍵終極教程_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、VB模擬按鍵終極教程 '有了它'啥游戲都不怕全局級模擬你會發(fā)現(xiàn),用上面的方法類比按鍵並不是對所有程式都有效的,有的程式啊,你向它發(fā)了一大堆消息,可是它卻一點(diǎn)反應(yīng)也沒有。這是怎麼回事呢?這就要看具體的情況了,有些程式 (特別是一些遊戲 )出於某些原因,會禁止用戶對它使用類比按鍵程式,這個怎麼實現(xiàn)呢?比如可以在程式中檢查一下,如果發(fā)現(xiàn)自己不是活動視窗,就不接受鍵盤 消息?;蛘咦屑?xì)檢查一下收到的鍵盤消息,你會發(fā)現(xiàn)真實的按鍵和類比的按鍵消 息總是有一些小差別,從這些小差別上,目的程式就能判斷出:這是假的!是 偽造的!因此,如果用 P ostMessage發(fā)送局部消息類比按鍵不成功的話,

2、你 可以試一試全局級的鍵盤消息,看看能不能騙過目的程式。類比全局鍵盤消息常見的可以有以下一些方法:(1)用API函數(shù)keybd_event,這個函數(shù)可以用來類比一個鍵盤事件,它的VB聲明為:DeclareSubkeybd_eventLib"user32"(ByValbVkAsByte,ByValbScanAsByte,ByVald wFlagsAsLong,ByValdwExtraInfoAsLong)參數(shù)bVk表示要類比的按鍵的虛擬碼,bScan表示該按鍵的掃描碼(一般可 以傳0),dwFlags表示是按下鍵還是釋放鍵(按下鍵為0,釋放鍵為2), dwExtraInfo

3、是擴(kuò)展標(biāo)誌,一般沒有用。比如要模擬按下 A 鍵,可以這樣:ConstKEYEVENTF_KEYUP=&H2keybd_eventVK_A,0,0,0'按下 A 鍵keybd_eventVK_A,0,KEYEVENTF_KEYUP,0'釋放 A 鍵注意有時候按鍵的速度不要太快,否則會出問題,可以用API函數(shù)Sleep來進(jìn)行延時,聲明如下: DeclareSubSleepLib"kernel32"(ByValdwMillisecondsAsLong)參數(shù) dwMilliseconds 表示延時的時間,以毫秒為單位。那麼如果要模擬按下功能鍵怎麼做呢?比如要

4、按下Ctrl+C實現(xiàn)拷貝這個功能,可以這樣:keybd_eventVK_Ctrl,0,0,0' 按下 Ctrl 鍵keybd_eventVK_C,0,0,0'按下 C 鍵Sleep500' 延時 500 毫秒keybd_eventVK_C,0,KEYEVENTF_KEYUP,0'釋放 C 鍵keybd_eventVK_Ctrl,0,KEYEVENTF_KEYUP,0' 釋放 Ctrl 鍵好了,現(xiàn)在你可以試試是不是可以騙過目的程式了,這個函數(shù)對大部分的視窗程式都有效,可是仍然有一部分遊戲?qū)λa(chǎn)生的鍵盤事件熟視無睹,這時候,你就要用上bScan這個參數(shù)了。一

5、般的,bScan都傳0,但是如果 目的程式是一些DirectX遊戲,那麼你就需要正確使用這個參數(shù)傳入掃描碼,用了它可以產(chǎn)生正確的硬體事件消息,以被遊戲識別。這樣的話,就可以 寫成這樣:keybd_eventVK_A,MapVirtualKey(VK_A,0),0,0'按下 A 鍵keybd_eventVK_A,MapVirtualKey(VK_A,0),KEYEVENTF_KEYUP,0'釋放 A 鍵以上就是用keybd_event函數(shù)來類比鍵盤事件。除了這個函數(shù),SendInput函數(shù)也可以類比全局鍵盤事件。Sen dl nput可以直接把一條消息插入到消息佇列中,算是比較底

6、層的了。它的 VB 聲明如下:DeclareFunctionSendInputLib"user32.dll"(ByValnInputsAsLong,pInputsAsGENERALINPUT,ByValcbSizeAsLong)AsLong參數(shù):ninprts :定義pinputs指向的結(jié)構(gòu)的數(shù)目。pinputs:指向INPUT結(jié)構(gòu)陣列的指標(biāo)。每個結(jié)構(gòu)代表插人到鍵盤或滑鼠輸 入流中的一個事件。cbSize定義INPUT結(jié)構(gòu)的大小。若cbSize不是INPUT結(jié)構(gòu)的大小,則函數(shù) 調(diào)用失敗。返回值:函數(shù)返回被成功地插人鍵盤或滑鼠輸入流中的事件的數(shù)目。若要獲得更多的錯誤資訊,可以

7、調(diào)用 GetlastError函數(shù)。備註:Sendlnput函數(shù)將INPUT結(jié)構(gòu)中的事件順序地插入鍵盤或滑鼠的輸入 流中。這些事件與用戶插入的(用滑鼠或鍵盤)或調(diào)用keybd_event,mouse_event,或另外的Sendlnput插人的鍵盤或滑鼠的輸入流不相容。嗯,這 個函數(shù)用起來蠻複雜的,因為它的參數(shù)都是指標(biāo)一類的東西。要用它來類比鍵 盤輸入,先要構(gòu)造一組資料結(jié)構(gòu),把你要類比的鍵盤消息裝進(jìn)去,然後傳給 它。為了方便起見,把它做在一個過程裏面,要用的時候直接調(diào)用好了,代碼 如下:DeclareFunctionSendInputLib"user32.dll"(ByVa

8、lnInputsAsLong,pInputsAsGENER ALINPUT,ByValcbSizeAsLong)AsLongDeclareSubCopyMemoryLib"kernel32"Alias"RtlMoveMemory"(pDstAsAny,pSrcA sAny,ByValByteLenAsLong)TypeGENERALINPUTdwTypeAsLongxi(0To23)AsByteEndTypeTypeKEYBDINPUTwVkAsIntegerwScanAsIntegerdwFlagsAsLongtimeAsLongdwExtraInfo

9、AsLongEndTypeConstINPUT_KEYBOARD=1SubMySendKey(bkeyAsLong)'參數(shù) bkey 傳入要類比按鍵的虛擬碼即可類比按下指定鍵DimGInput(0To1)AsGENERALINPUTDimKInputAsKEYBDINPUTKInput.wVk=bkey'你要類比的按鍵KInp ut.dwFlags=O 按下鍵標(biāo)誌GInput(0).dwType=INPUT_KEYBOARDCop yMemoryGI np ut(0).xi(0),KI np ut,Le n(Klnput)這個函數(shù)用來把記憶體中 KInput的資料複製到 GIn

10、putKInput.wVk=bkeyKInput.dwFlags=KEYEVENTF_KEYUP'釋放按鍵GI npu t(1).dwT yp e=IN PUT_KE YBOARD 示該消息為鍵盤消息CopyMemoryGInput(1).xi(O),KInput,Len(KInput)'以上工作把按下鍵和釋放鍵共 2條鍵盤消息加入到GInput資料結(jié)構(gòu)中SendInput2,GInput(O),Len(GInput(O)'把GInput中存放的消息插入到消息列隊EndSub除了以上這些,用全局鉤子也可以類比鍵盤消息。如果你對 windows中消 息鉤子的用法已經(jīng)有所瞭

11、解,那麼你可以通過設(shè)置一個全局 hook來類比鍵盤 消息,比如,你可以用wh_journal play back個鉤子來類比按鍵。wh_journal play back一個系統(tǒng)級的全局鉤子,它和 wh_journalrecoRD功能是相對的,常用它們來記錄並重播鍵盤滑鼠操作。 wh_journalrecoRD子用來將鍵盤滑鼠的操作忠實地記錄下來,記錄下來的 資訊可以保存到檔中,而wh_journal play back可以重現(xiàn)這些操作。當(dāng)然亦可以單獨(dú)使用WH_JOURNAL PLAY BACK類比鍵盤操作。你需要首先聲明SetWindowsHookEx函數(shù),它可以用來安裝消息鉤子:Decla

12、reFunctionSetWindowsHookExLib"user32"Alias"SetWindowsHookExA"(ByValidHookAsLong,ByVallpfnAsLong,ByValhmodAsLong,ByValdwThreadIdAsLong)AsLo ng先安裝 WH_JOURNALPLAYBAC這個鉤子,然後你需要自己寫一個鉤子函 數(shù),在系統(tǒng)調(diào)用它時,把你要模擬的事件傳遞給鉤子參數(shù)IP aram所指向的EVENTMSC區(qū)域,就可以達(dá)到類比按鍵的效果。不過用這個鉤子類比鍵盤事件 有一個副作用,就是它會鎖定真實的滑鼠鍵盤,不過如果你就是想在模擬的時 候不會受真實鍵盤操作的干擾,那麼用用它倒是個不錯的主意。3.驅(qū)動級模擬如果上面的方法你都試過了,可是你發(fā)現(xiàn)目的程式卻仍然頑固的不接受你 類比的消息,寒 還好,我還剩下最後一招,這就是驅(qū)動級模擬:直接 讀寫鍵盤的硬體埠!有一些使用DirectX介面的遊戲程式,它們在讀取鍵盤操作時繞過了 wi ndows的消息機(jī)制,而使用Direct Input這是因為有些遊戲?qū)磿r性控制的要 求比較高,比如賽車遊戲,要求以最快速度回應(yīng)鍵盤輸入。而 windows 消息由於是佇列形式的,消息在傳遞時會有不少延遲,有時 1

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論