五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

鼠標(biāo)鍵盤鉤子-組合鍵監(jiān)測

2022-10-14 18:43 作者:因心情DEQ  | 我要投稿

假設(shè)目標(biāo)窗口的句柄已取得(hwnd),然后要用PostMessage向該窗口發(fā)送按鍵消息,對于普通字符鍵,直接用WM_CHAR消息最簡單,如下:?

????PostMessage hwnd, WM_CHAR, Asc("A"), 0???' 發(fā)送一個 A 字符?

對于非普通字符按鍵,如功能鍵、方向鍵等,要用 WM_KEYDOWN、WM_KEYUP 消息,如下:?

????PostMessage hWndMsg, WM_KEYDOWN, VK_ESCAPE, &H00010001??' 模擬按下 Esc 鍵?

????PostMessage hWndMsg, WM_KEYUP, VK_ESCAPE, &HC0010001????' 模擬抬起 Esc 鍵?

以上最后一個參數(shù)(lParam)低16位(0001)表示按鍵一次,高8位00表示按下,C0表示抬起,次高8位(01)表示該鍵的掃描碼,可用 API MapVirtualKey(VirtualKey, 0)取得(注意:掃描碼在各系統(tǒng)可能會不同,在此以具體數(shù)值示例,實(shí)際應(yīng)用MapVirtualKey取得)。?

下面要講Shift/Control/Alt修飾鍵與其它按鍵的組合怎樣發(fā)送,對于Shift和Control用以下方式(用到 API keybd_event):?

????keybd_event VK_SHIFT, &H2A, 0, 0??' 模擬按下SHIFT鍵,&H2A是VK_SHIFT的掃描碼?

????PostMessage hWndMsg, WM_KEYDOWN, VK_A, &H001E0001 ' 模擬按下 A 鍵,SHIFT+A產(chǎn)生一個大寫A字符?

????PostMessage hWndMsg, WM_KEYUP, VK_A, &HC01E0001???' 模擬抬起 A 鍵?

????keybd_event VK_SHIFT, &H2A, KEYEVENTF_KEYUP, 0????' 模擬抬起 SHIFT 鍵?

以上VK_SHIFT(掃描碼2A)換成VK_CONTROL(掃描碼1D)就可以實(shí)現(xiàn)Ctrl組合鍵,VK_A(掃描碼1E)也可以換成任意功能鍵,如VK_F4(掃描碼3E)。?

對于Alt修飾鍵比較特別,它屬于系統(tǒng)按鍵,要用 WM_SYSKEYDOWN/WM_SYSKEYUP 消息,如下:?

????PostMessage hWndMsg, WM_SYSKEYDOWN, VK_F4, &H003E0001 Or &H20000000 ' 模擬按下 Alt+F4?

????PostMessage hWndMsg, WM_SYSKEYUP, VK_F4, &HC03E0001 Or &H20000000???'??模擬抬起 Alt+F4?

???????????????????????????' &H20000000 為 context code 位,置 1 表示 Alt 鍵被按下

'’捕捉快捷鍵,控制HOOK開關(guān),alt+/ 助手當(dāng)前行到最后

????????????If?wParam = 191 And?(lParam And?&H20000000) <> 0 Then

????????????????'If (lParam And &HC000000) = 0 Then ?'是否進(jìn)行ALT+F4操作

????????????????' ???MyHBHook = 1 '鉤子吃掉這個消息

????????????????'End If

????????????????MyKeyboardProc = 0

????????????????annotation注釋()

????????????????MyKeyboardProc = 1

????????????End?If

lParam這個參數(shù)我已經(jīng)知道了是個32位的 3個組合參數(shù)?

&h 00 00 00 00?

高8位 00=按下 C0=彈起?

中8位 掃描碼?

低16位 按鍵次數(shù)和擴(kuò)展功能?

你說的魔法數(shù),意思是不是編程人員因?yàn)榉浅J煜ごa, 隨便用了個“富含特定技巧”的數(shù)字?

HOOK過程中,wparam是鍵碼,lparam是一些組合信息,其中包含ALT鍵的狀態(tài).?

If wParam = 115?這里的115其實(shí)是VK_F4,聲明個常量會讓你的程序可讀性大大增加.?

而lparam的第29位就是ALT鍵是否按下,按下為1,否則為零.

‘‘’屏蔽Ctrl+Esc

???if?kbh.vkCode = Keys.Escape and?Control.ModifierKeys = Keys.Control

判斷按下CTRL鍵

?If?wParam = 76 And?(lParam And?&H80000000) = 0 And?GetKeyState(17) < 0 Then?' ctrl+L

判斷按下shift鍵 ?只能成功一個,所以先判斷功能鍵,再判斷里面的普通按鍵

?keybd_event(16, 0, 0, 0) '按下shift

?' keybd_event(16, 2, 0, 0) '抬起shift

?Public?Declare?Sub?keybd_event Lib?"user32"?Alias?"keybd_event"?(ByVal?bVk As?Integer, ByVal?bScan As?Integer, ByVal?dwFlags As?Integer, ByVal?dwExtraInfo As?Integer)

?Public?Declare?Function?PostMessage Lib?"user32"?Alias?"PostMessageA"?(ByVal?hwnd As?Integer, ByVal?wMsg As?Integer, ByVal?wParam As?Integer, lParam As?Integer) As?Integer

?PostMessage(ActiveHandle, WM_KEYDOWN, 16, MakeKeyLparam(16, WM_KEYUP)) '抬起shift

Public?Function?MakeKeyLparam(ByVal?VirtualKey As?Integer, ByVal?flag As?Integer) As?Integer

????????Dim?s As?String

????????Dim?Firstbyte As?String?'lparam參數(shù)的24-31位

????????If?flag = WM_KEYDOWN Then?'如果是按下鍵

????????????Firstbyte = "00"

????????Else

????????????Firstbyte = "C0"?'如果是釋放鍵

????????End?If

????????Dim?Scancode As?Long

????????'獲得鍵的掃描碼

????????Scancode = MapVirtualKey(VirtualKey, 0)

????????Dim?Secondbyte As?String?'lparam參數(shù)的16-23位,即虛擬鍵掃描碼

????????Secondbyte = Right("00"?& Hex(Scancode), 2)

????????s = Firstbyte & Secondbyte & "0001"?'0001為lparam參數(shù)的0-15位,即發(fā)送次數(shù)和其它擴(kuò)展信息

????????MakeKeyLparam = Val("&H"?& s)

End?Function

發(fā)送按鍵函數(shù)兩個混合用

?If?(lParam And?&H2A) = 0 And?GetKeyState(16) < 0 Then?‘判斷按下shift鍵

?Sleep(100)

???PostMessage(ActiveHandle, WM_KEYUP, 16, MakeKeyLparam(16, WM_KEYUP)) '抬起shift


鼠標(biāo)鍵盤鉤子-組合鍵監(jiān)測的評論 (共 條)

分享到微博請遵守國家法律
石渠县| 宜君县| 托里县| 玉田县| 蓝山县| 彩票| 屏东县| 体育| 灵武市| 陆河县| 保康县| 蒙城县| 涞水县| 康马县| 泸溪县| 如东县| 弋阳县| 永嘉县| 抚州市| 襄城县| 垣曲县| 和硕县| 上思县| 呼伦贝尔市| 寿阳县| 玉溪市| 丰县| 锦州市| 防城港市| 大安市| 黑水县| 青冈县| 武清区| 澎湖县| 滨州市| 永仁县| 莲花县| 庆云县| 伊宁市| 邵武市| 阳泉市|