首页
社区
课程
招聘
[旧帖] [求助][求助]两个关于WH_KEYBOARD_LL键盘钩子的问题? 0.00雪花
发表于: 2010-10-27 16:24 1525

[旧帖] [求助][求助]两个关于WH_KEYBOARD_LL键盘钩子的问题? 0.00雪花

2010-10-27 16:24
1525
小弟,最近看了键盘钩子的东西,有些问题一直没搞明白,恳请各位高手能帮小弟解解惑。谢谢了

1,小弟想写个简单的程序试一下,就是实现每次按键盘都在打出的字母前面多打一个字母比如每次打‘A’,就在前面打个'C',可是现在每次打A前面都会出现一大串的‘C’。
我用的是WH_KEYBOARD_LL键盘钩子,下面是那个处理函数,这是怎么回事啊?

LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
                    WPARAM wParam,
                    LPARAM lParam
                    )
{
  if(HC_ACTION == nCode)
  {
      
     if(WM_KEYDOWN == wParam)
     {

        keybd_event('C',0,0,0);
       keybd_event('C',0,2,0);

    }
    return CallNextHookEx( hkb, nCode, wParam, lParam );
  } 
  return CallNextHookEx( hkb, nCode, wParam, lParam );
}

2,我在网上查的好多资料都说钩子函数要写在dll里,做上面那个程序的时候没写成dll也可以用了,问一下是不是因为键盘钩子比较简单,所以不用写在dll里啊?

[课程]Android-CTF解题方法汇总!

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 156
活跃值: (190)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
2
不是因为键盘钩子简单,而是因为钩子的作用范围不同,

不知道你听过着两个概念没有,全局钩子与局部钩子
如果你不知道,自己下去学习一下,
2010-10-27 16:41
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我这菜鸟理解,对于键盘钩子来说全局钩子就是能捕获所有窗口的按键消息,局部钩子只能捕获程序运行的这个窗口的按键消息,对不对啊。。。谢谢了
我那个程序里设置这个键盘钩子的函数最后一个参数设成0,是不是就是全局钩子了啊
hkb=SetWindowsHookEx(WH_KEYBOARD_LL,(HOOKPROC)LowLevelKeyboardProc,theApp.m_hInstance,0);
2010-10-27 17:16
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
4
哥们你无限循环了。。。
你模拟按键后又进入了这个钩子,然后就…………

这个钩子不用dll是因为底层钩子根本就不注入到目标进程中。
2010-10-27 17:17
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
嗯 你循环了 用个变量记录一下吧
2010-10-27 17:28
0
雪    币: 1163
活跃值: (137)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
6
这个不用增加变量来区别

lParam是个KBDLLHOOKSTRUCT结构体

typedef struct tagKBDLLHOOKSTRUCT {
    DWORD     vkCode;
    DWORD     scanCode;
    DWORD     flags;
    DWORD     time;
    ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;

其中dwExtraInfo参数和你模拟按键时候的第四个参数是相关的。通过判断这个可以直接判断是否为模拟的按键
2010-10-27 18:04
0
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
多谢楼上了
我照你说的在keybd_event第四个参数设为1表示是模拟按键,然后在函数开头多加一个判断,若dwExtraInfo为1就直接return CallNextHookEx( hkb, nCode, wParam, lParam );就可以了

多谢
2010-10-27 18:44
0
游客
登录 | 注册 方可回帖
返回
//