用WH_KEYBOARD_LL鉤子,在回呼中得到結構:
Dim P As KBDLLHOOKSTRUCT
'lParam 指向KBDLLHOOKSTRUCT結構的指標
Call CopyMemory(P, ByVal lParam, LenB(P))
請問,我修改了P的內容后,如何再回傳給下一個鉤子
Call CallNextHookEx(nCode,wParam,lParam(P??)
uj5u.com熱心網友回復:
既然是“指標”,傳:byval Varptr(P)就行了。uj5u.com熱心網友回復:
但沒反應啊!Private Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal nCode As Long, ByVal wParam As Long, lParam As Any) As Long
啟動
mHook=SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookKbProc, App.hInstance, 0)
回呼函式,收A,轉發為B,
Public Function HookKbProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim uP As KBDLLHOOKSTRUCT
If nCode < 0 Or nCode > 0 Then
ExLine:
HookKbProc = CallNextHookEx(0, nCode, wParam, lParam) '將訊息傳給下一個鉤子 '本函式回傳值,由下一鉤子決定
Exit Function
End If
Call CopyMemory(uP, ByVal lParam, LenB(uP))
With uP
If .vkCode = vbKeyA Then
.vkCode = vbKeyB
Debug.Print "A>B"
End If
End With
HookKbProc = CallNextHookEx(0, nCode, wParam, ByVal VarPtr(uP))
End Function
uj5u.com熱心網友回復:
坊間傳聞,SetWindowsHookEx必須放在DLL中。uj5u.com熱心網友回復:
有某些全域鉤子可以不依賴于任何DLL而正常作業的。這些鉤子包括,WH_JOURNALPLAYBACK,WH_JOURNALRECORD,WH_KEYBOARD_LL,WH_MOUSE_LL。為什么這些鉤子可以不依賴于DLL而正常作業呢?我們可以從MSDN中得到答案,MSDN中對于這四種鉤子都這樣的描述“This hook is called in the context of the thread that installed it.”,翻譯成中文意思是鉤子函式的呼叫是在安裝鉤子的執行緒背景關系中進行的,說得更明白些,意思就是這些鉤子是在哪個執行緒當中安裝的,其鉤子函式就在哪個執行緒中執行。所以使用這四種鉤子是達不到代碼注入的效果的,當然也就可以不依賴于任何DLL了。MSDN中只對個別鉤子指出了必須還是沒有必要使用DLL。
是不是也因為無法代碼注入,從而無法把修改后的資料傳給下一個鉤子?
uj5u.com熱心網友回復:
匯編指令面前,了無秘密。http://edu.csdn.net/course/detail/2344 C語言指標與匯編記憶體地址-一.代碼要素
uj5u.com熱心網友回復:
沒想明白為什么會沒有效果。先前試了一下,我不僅更改了vkCode,并且還把鍵盤掃描碼也“同步更正”了的,也沒效果。
(我不是copymemory后再改資料,而是直接改lParam指向的資料區)
難道系統在后面發送鍵盤訊息時,并不以“鉤子資料”為準,而是以原始鍵盤資料為準?
(傳遞鉤子訊息的資料只是一個“副本”,給鉤子處理完之后直接丟棄?)
如果是這樣,那“底層HOOK”又有多大的實際意義呢…………
難道就是為了方便“木馬”搞鍵盤記錄嗎!
uj5u.com熱心網友回復:
先別說“跨行程”的,即使對“本行程”也沒有效果啊!
你可以試試:
自己畫個Text控制元件,程式運行、安裝鉤子,
然后在Text中輸入字符,可以看到: 即使在鉤子程序中更改了按鍵資訊,也并沒有起到“改”的作用。
我也看了“回應秩序”:
鉤子的回應,確實在Text的控制元件事件之前!
uj5u.com熱心網友回復:
老大仔細啊,說實話,俺還真沒想到把掃描碼也同步更正,大意了大意了,
只是試過,用全域變數的方式傳資料,結果------當然-------沒戲:(
uj5u.com熱心網友回復:
非常同意,因為試過,就是這種情況,連自己的行程都沒法改,
所以疑問啊....
網上搜了半天,這么多年來,難道沒任何人發現這個問題嗎?
uj5u.com熱心網友回復:
匯編指令面前,了無秘密。
http://edu.csdn.net/course/detail/2344 C語言指標與匯編記憶體地址-一.代碼要素
不明覺厲
好東西啊,雖然現在不懂,但收藏先 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/55862.html
標籤:API
上一篇:請問如何優雅地實作暫停功能
下一篇:vba 表單 下一項設定
