VB模擬按鍵終極學(xué)習(xí)教程_第1頁(yè)
VB模擬按鍵終極學(xué)習(xí)教程_第2頁(yè)
VB模擬按鍵終極學(xué)習(xí)教程_第3頁(yè)
VB模擬按鍵終極學(xué)習(xí)教程_第4頁(yè)
VB模擬按鍵終極學(xué)習(xí)教程_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、VB模擬按鍵終極教程有了它啥游戲都不怕全局級(jí)模擬你會(huì)發(fā)現(xiàn),用上邊的方法類比按鍵並不是對(duì)全部程式都有效的,有的程式啊,你向它發(fā)了一大堆信息,但是它卻一點(diǎn)反應(yīng)也沒有。這是怎麼回事呢?這就要看具體的情況了,有些程式(特別是一些遊戲)出於某些原由,會(huì)嚴(yán)禁用戶對(duì)它使用類比按鍵程式,這個(gè)怎麼實(shí)現(xiàn)呢?比方能夠在程式中檢查一下,假如發(fā)現(xiàn)自己不是活動(dòng)視窗,就不接受鍵盤信息?;蛟S仔細(xì)檢查一下收到的鍵盤信息,你會(huì)發(fā)現(xiàn)真實(shí)的按鍵和類比的按鍵信息總是有一些小差別,從這些小差別上,目的程式就能判斷出:這是假的!是偽造的!所以,假如用PostMessage發(fā)送局部信息類比按鍵不可以功的話,你能夠試一試全局級(jí)的鍵盤信息,看看

2、能不可以夠騙過(guò)目的程式。類比全局鍵盤信息常見的能夠有以下一些方法:(1)用API函數(shù)keybd_event,這個(gè)函數(shù)能夠用來(lái)類比一個(gè)鍵盤事件,它的VB聲明為:DeclareSubkeybd_eventLibuser32(ByValbVkAsByte,ByValbScanAsByte,ByValdwFlagsAsLong,ByValdwExtraInfoAsLong)參數(shù)bVk表示要類比的按鍵的虛擬碼,bScan表示該按鍵的掃描碼(一般能夠傳0),dwFlags表示是按下鍵還是釋放鍵(按下鍵為0,釋放鍵為2),dwExtraInfo是擴(kuò)展標(biāo)誌,一般沒合用。比方要模擬按下A鍵,能夠這樣:Const

3、KEYEVENTF_KEYUP=&H2keybd_eventVK_A,0,0,0按下A鍵1/6keybd_eventVK_A,0,KEYEVENTF_KEYUP,0釋放A鍵注意有時(shí)候按鍵的速度不要太快,否則會(huì)出問題,能夠用API函數(shù)Sleep來(lái)進(jìn)行延時(shí),聲明以下:DeclareSubSleepLibkernel32(ByValdwMillisecondsAsLong)參數(shù)dwMilliseconds表示延時(shí)的時(shí)間,以毫秒為單位。那麼假如要模擬按下功能鍵怎麼做呢?比方要按下Ctrl+C實(shí)現(xiàn)拷貝這個(gè)功能,能夠這樣:keybd_eventVK_Ctrl,0,0,0按下Ctrl鍵keybd_event

4、VK_C,0,0,0按下C鍵Sleep500延時(shí)500毫秒keybd_eventVK_C,0,KEYEVENTF_KEYUP,0釋放C鍵keybd_eventVK_Ctrl,0,KEYEVENTF_KEYUP,0釋放Ctrl鍵好了,現(xiàn)在你能夠試試是否是能夠騙過(guò)目的程式了,這個(gè)函數(shù)對(duì)大多數(shù)的視窗程式都有效,但是仍舊有一部分遊戲?qū)λa(chǎn)生的鍵盤事件熟視無(wú)睹,這時(shí)候,你就要用上bScan這個(gè)參數(shù)了。一般的,bScan都傳0,但是假如目的程式是一些DirectX遊戲,那麼你就需要正確使用這個(gè)參數(shù)傳入掃描碼,用了它能夠產(chǎn)生正確的硬體事件信息,以被遊戲識(shí)別。這樣的話,就能夠?qū)懗蛇@樣:2/6keybd_eve

5、ntVK_A,MapVirtualKey(VK_A,0),0,0按下A鍵keybd_eventVK_A,MapVirtualKey(VK_A,0),KEYEVENTF_KEYUP,0釋放A鍵以上就是用keybd_event函數(shù)來(lái)類比鍵盤事件。除了這個(gè)函數(shù),SendInput函數(shù)也能夠類比全局鍵盤事件。SendInput能夠直接把一條信息插入到信息佇列中,算是比較底層的了。它的VB聲明以下:DeclareFunctionSendInputLibuser32.dll(ByValnInputsAsLong,pInputsAsGENERALINPUT,ByValcbSizeAsLong)AsLong參

6、數(shù):nlnprts:定義plnputs指向的結(jié)構(gòu)的數(shù)目。plnputs:指向INPUT結(jié)構(gòu)陣列的指標(biāo)。每個(gè)結(jié)構(gòu)代表插人到鍵盤或滑鼠輸入流中的一個(gè)事件。cbSize:定義INPUT結(jié)構(gòu)的大小。若cbSize不是INPUT結(jié)構(gòu)的大小,則函數(shù)調(diào)用失敗。返回值:函數(shù)返回被成功地插人鍵盤或滑鼠輸入流中的事件的數(shù)目。若要獲得更多的錯(cuò)誤資訊,能夠調(diào)用GetlastError函數(shù)。備註:Sendlnput函數(shù)將INPUT結(jié)構(gòu)中的事件順序地插入鍵盤或滑鼠的輸入流中。這些事件與用戶插入的(用滑鼠或鍵盤)或調(diào)用keybd_event,mouse_event,或其他的Sendlnput插人的鍵盤或滑鼠的輸入流不相容。

7、嗯,這個(gè)函數(shù)用起來(lái)蠻複雜的,因?yàn)樗膮?shù)都是指標(biāo)一類的東西。要用它來(lái)類比鍵盤輸入,先要構(gòu)造一組資料結(jié)構(gòu),把你要類比的鍵盤信息裝進(jìn)去,然後傳給它。為了方便起見,把它做在一個(gè)過(guò)程裏面,要用的時(shí)候直接調(diào)用好了,代碼以下:3/6DeclareFunctionSendInputLibuser32.dll(ByValnInputsAsLong,pInputsAsGENERALINPUT,ByValcbSizeAsLong)AsLongDeclareSubCopyMemoryLibkernel32AliasRtlMoveMemory(pDstAsAny,pSrcAsAny,ByValByteLenAsLon

8、g)TypeGENERALINPUTdwTypeAsLongxi(0To23)AsByteEndTypeTypeKEYBDINPUTwVkAsIntegerwScanAsIntegerdwFlagsAsLongtimeAsLongdwExtraInfoAsLongEndTypeConstINPUT_KEYBOARD=1SubMySendKey(bkeyAsLong)參數(shù)bkey傳入要類比按鍵的虛擬碼即可類比按下指定鍵DimGInput(0To1)AsGENERALINPUTDimKInputAsKEYBDINPUTKInput.wVk=bkey你要類比的按鍵4/6KInput.dwFlags=

9、0按下鍵標(biāo)誌GInput(0).dwType=INPUT_KEYBOARDCopyMemoryGInput(0).xi(0),KInput,Len(KInput)這個(gè)函數(shù)用來(lái)把記憶體中KInput的資料複製到GInputKInput.wVk=bkeyKInput.dwFlags=KEYEVENTF_KEYUP釋放按鍵GInput(1).dwType=INPUT_KEYBOARD表示該信息為鍵盤信息CopyMemoryGInput(1).xi(0),KInput,Len(KInput)以上工作把按下鍵和釋放鍵共2條鍵盤信息加入到GInput資料結(jié)構(gòu)中SendInput2,GInput(0),Le

10、n(GInput(0)把GInput中寄存的信息插入到信息列隊(duì)EndSub除了以上這些,用全局鉤子也能夠類比鍵盤信息。假如你對(duì)windows中消息鉤子的用法已經(jīng)有所瞭解,那麼你能夠通過(guò)設(shè)置一個(gè)全局HOOK來(lái)類比鍵盤信息,比方,你能夠用WH_JOURNALPLAYBACK這個(gè)鉤子來(lái)類比按鍵。WH_JOURNALPLAYBACK是一個(gè)系統(tǒng)級(jí)的全局鉤子,它和WH_JOURNALRECORD的功能是相對(duì)的,常用它們來(lái)記錄並重播鍵盤滑鼠操作。WH_JOURNALRECORD鉤子用來(lái)將鍵盤滑鼠的操作忠實(shí)地記錄下來(lái),記錄下來(lái)的資訊能夠保留到檔中,而WH_JOURNALPLAYBACK則能夠重現(xiàn)這些操作。當(dāng)然

11、亦能夠單獨(dú)使用WH_JOURNALPLAYBACK來(lái)類比鍵盤操作。你需要第一聲明SetWindowsHookEx函數(shù),它能夠用來(lái)安裝信息鉤子:5/6DeclareFunctionSetWindowsHookExLibuser32AliasSetWindowsHookExA(ByValidHookAsLong,ByVallpfnAsLong,ByValhmodAsLong,ByValdwThreadIdAsLong)AsLong先安裝WH_JOURNALPLAYBACK這個(gè)鉤子,然後你需要自己寫一個(gè)鉤子函數(shù),在系統(tǒng)調(diào)用它時(shí),把你要模擬的事件傳遞給鉤子參數(shù)lParam所指向的EVENTMSG區(qū)域,

12、就能夠達(dá)到類比按鍵的見效。不過(guò)用這個(gè)鉤子類比鍵盤事件有一個(gè)副作用,就是它會(huì)鎖定真實(shí)的滑鼠鍵盤,不過(guò)假如你就是想在模擬的時(shí)候不會(huì)受真實(shí)鍵盤操作的干擾,那麼用用它倒是個(gè)不錯(cuò)的想法。3.驅(qū)動(dòng)級(jí)模擬假如上邊的方法你都試過(guò)了,但是你發(fā)現(xiàn)目的程式卻仍舊頑固的不接受你類比的信息,寒還好,我還剩下最後一招,這就是驅(qū)動(dòng)級(jí)模擬:直接讀寫鍵盤的硬體埠!有一些使用DirectX介面的遊戲程式,它們?cè)谧x取鍵盤操作時(shí)繞過(guò)了windows的信息機(jī)制,而使用DirectInput.這是因?yàn)橛行┻[戲?qū)磿r(shí)性控制的要求比較高,比方賽車遊戲,要求以最迅速度回應(yīng)鍵盤輸入。而windows信息由於是佇列形式的,信息在傳遞時(shí)會(huì)有好多延遲

13、,有時(shí)1秒鐘也就傳遞十幾條信息,這個(gè)速度達(dá)不到遊戲的要求。而DirectInput則繞過(guò)了windows信息,直接與鍵盤驅(qū)動(dòng)程式打交道,效率當(dāng)然提升了好多。所以也就造成,對(duì)這樣的程式無(wú)論用PostMessage或許是keybd_event都不會(huì)有反應(yīng),因?yàn)檫@些函數(shù)都在較高層。對(duì)於這樣的程式,只能用直接讀寫鍵盤埠的方法來(lái)類比硬體事件了。要用這個(gè)方法來(lái)類比鍵盤,需要先瞭解一下鍵盤編程的相關(guān)知識(shí)6/6內(nèi)容總結(jié)(1)VB模擬按鍵終極教程有了它啥游戲都不怕全局級(jí)模擬你會(huì)發(fā)現(xiàn),用上邊的方法類比按鍵並不是對(duì)全部程式都有效的,有的程式啊,你向它發(fā)了一大堆信息,但是它卻一點(diǎn)反應(yīng)也沒有(2)或許仔細(xì)檢查一下收到的鍵盤

溫馨提示

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

評(píng)論

0/150

提交評(píng)論