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