Q键连发。按住Q键 则连发。松开则停止2。
Q鍵連發(fā)。按住Q鍵?則連發(fā)。松開(kāi)則停止2。?
用軟件模擬可以做到。
掛低級(jí)鍵盤鉤子,判斷按鍵的來(lái)源。
能判斷出是真實(shí)鍵盤按鍵,還是模擬按鍵,則就可以做了。
攔截真實(shí)按鍵,放行模擬按鍵。
驅(qū)動(dòng)級(jí)的就無(wú)法判斷了。
指狗為雞。
//
哪個(gè)API,能判斷出真實(shí)按鍵/模擬按鍵?
//
setwindowshookex,在回調(diào)函數(shù)里可以判斷真實(shí)按鍵還是軟件模擬。有些游戲就是靠這方法屏蔽模擬按鍵的
指狗為雞?14:18?
//
按鍵精靈的
普通模擬,你HOOK哪個(gè)函數(shù)。
超級(jí)模擬,HOOK哪個(gè)函數(shù)?
劍仙十號(hào)?15:28?
//
低級(jí)鍵盤鉤子,wh_keyboard_ll,(13)
當(dāng)然這只能判斷是不是軟件模擬,硬件戓超級(jí)是無(wú)法判斷的
指狗為雞?15:52
2樓.?全局鍵盤鉤子,回調(diào)函?數(shù)的參數(shù)3,是結(jié)構(gòu)體。
可以先寫成整數(shù)型。
我們來(lái)看看該結(jié)構(gòu)在MSDN中的解釋
//
Public?Structure?KeyboardHookStruct
Dim?vkCode?As?Integer
Dim?ScanCode?As?Integer
Dim?Flags?As?Integer
Dim?Time?As?Integer
Dim?DwExtraInfo?As?Integer
End?Structure
//
其中各個(gè)參數(shù)意義如下:
VkCode:按鍵的虛擬鍵碼。鍵盤上的每個(gè)按鍵對(duì)應(yīng)一個(gè)虛擬鍵碼
ScanCode:硬件的掃描碼
Flags:按鍵消息的詳細(xì)信息。是一些標(biāo)識(shí)位的組合
Time:時(shí)間。
DwExtraInfo:擴(kuò)展到按鍵消息的信息
3樓.?結(jié)構(gòu)體的成員3,Flags
是一個(gè)八位的二進(jìn)制,各個(gè)位的標(biāo)識(shí)信息如下:
從右到左數(shù)起。
0位:擴(kuò)展鍵的標(biāo)識(shí)位。
1表示該鍵是擴(kuò)展鍵;0表示不是。
1位~3位:保留位,一般為0。
4位:消息類型的標(biāo)識(shí)位。
1表示消息是模擬的;0表示消息是真實(shí)的。
5位:Alt鍵的標(biāo)識(shí)位。
1表示Alt是按住的;0表示Alt鍵沒(méi)有被按下
6位:保留位,一般是0
7位:按鍵的狀態(tài)標(biāo)識(shí)位。1表示按鍵是彈起的,0表示按鍵是按住的
在易里面,二進(jìn)制數(shù)都做成?十進(jìn)制數(shù)。
二進(jìn)制??10000,十進(jìn)制是16。16就表示按鍵消息是模擬的。
if(鍵盤.Flags==16)
traceprint("模擬按鍵。")
//
Flags參數(shù)的第四位,能區(qū)分消息的類別。
當(dāng)使用物理鍵盤,是真實(shí)的按鍵消息,這位是0;
當(dāng)用keybd_event函數(shù),模擬按鍵消息時(shí),這個(gè)進(jìn)制位是1。
4樓.?調(diào)用API函數(shù)RtlMoveMemory,,
把回調(diào)函數(shù),參數(shù)3的數(shù)據(jù),復(fù)制到定義好的結(jié)構(gòu)體中。
.
復(fù)制之前,,參數(shù)3的數(shù)據(jù)是在內(nèi)存中的。
//
在定義RtlMoveMemory這個(gè)dll前,先要定義一個(gè)結(jié)構(gòu)體1。
vkCode?整數(shù)型
ScanCode?整數(shù)型
Flags?整數(shù)型
Time?整數(shù)型
DwExtraInfo?整數(shù)型
//
定義RtlMoveMemory這個(gè)dll。
查詢MSDN,參數(shù)1是結(jié)構(gòu)體指針。
參數(shù)1的數(shù)據(jù)類型,定義為上一步的結(jié)構(gòu)體1。勾選傳址。
//
在程序集窗口,先定義一個(gè)局部變量。鍵盤
調(diào)用API函數(shù)RtlMoveMemory,,
把回調(diào)函數(shù),參數(shù)3的數(shù)據(jù),復(fù)制到定義好的結(jié)構(gòu)體中。
.
復(fù)制之前,,參數(shù)3的數(shù)據(jù)是在內(nèi)存中的。
5樓.?之后在回調(diào)函數(shù)中,判斷鍵盤.Flags?的值就好了。
鍵盤.Flags?=?0?//真實(shí)按鍵。攔?截。
鍵盤.Flags?=?16//二進(jìn)制數(shù)是?10000,模擬按鍵。放行。
劍仙十號(hào)?5-22?16:45?回復(fù)?
6樓.?之后在回調(diào)函數(shù)中,
if(鍵盤.VkCode==81?&&?鍵盤.Flags?=?0)
traceprint("Q鍵。真實(shí)按住。")
//攔截。
發(fā)送Q鍵的模擬按鍵。
返回(1)
end
.
.
前臺(tái)真實(shí)按鍵的API,和前臺(tái)模擬按鍵的API是一樣的。但可以判斷出真實(shí)或模擬。
轉(zhuǎn)載于:https://www.cnblogs.com/champion8/p/5555549.html
總結(jié)
以上是生活随笔為你收集整理的Q键连发。按住Q键 则连发。松开则停止2。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 低代码开发助力家电行业快速搭建售后服务工
- 下一篇: java通过扫码枪获取数据