键盘钩子中回调函数的参数的疑问

gnuljf 2003-07-30 02:24:34
在键盘钩子的回调中有三个参数:nCode,wParam,lParam
我不是很明白这些参数的作用。
nCode有些资料中是判断其是否大于0,有些又是判断其是否与HC_ACTION相等。究竟它指示的是什么意思?
从wParam,lParam中能否判断功能键状态(Ctrl,Shift,Alt)?应该怎样判断?
而且为什么总是得到两次反应?
...全文
141 19 打赏 收藏 举报
写回复
19 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
gnuljf 2004-02-24
唉,结贴吧,已经很久了。
  • 打赏
  • 举报
回复
Coder 青田 2003-11-13
上面已经说的很清楚了~~
注意这里:
if (!(lParam & 0xA0000000))//相应一次
这样以后就只有一次反应了~~
  • 打赏
  • 举报
回复
gnuljf 2003-11-02
msdn中净是e文看不明白啊
  • 打赏
  • 举报
回复
msdn
  • 打赏
  • 举报
回复
Paris_Luo 2003-10-09
学习
  • 打赏
  • 举报
回复
qhluo02 2003-10-09
看下MSDN那里就有这个介绍
  • 打赏
  • 举报
回复
qhluo02 2003-10-09
看下NSMD那里就有这个介绍
  • 打赏
  • 举报
回复
gnuljf 2003-09-11
唉,难道就没人愿意再回答了吗?
  • 打赏
  • 举报
回复
joachern 2003-08-29
gz
  • 打赏
  • 举报
回复
shines77 2003-08-29
收藏
  • 打赏
  • 举报
回复
FAICHEN 2003-08-11
看看lParam的每位代表什末
  • 打赏
  • 举报
回复
gnuljf 2003-08-11
keystroke-message是什么意思?
  • 打赏
  • 举报
回复
gnuljf 2003-08-11
MSDN都是E文的,本人E文太差,看得糊里糊涂的。
那HC_ACTION又是什么东西?
我知道可以用GetKeyState()判断按键的状态,问题是能否从wParam,lParam中获得功能键状态吗?
wParam和lParam有什么区别吗?
  • 打赏
  • 举报
回复
FAICHEN 2003-08-05
响应两次是因为分别在按下和弹起截获了两次
只要在其中一个状态下作判断就可以
如楼上第一层
  • 打赏
  • 举报
回复
FAICHEN 2003-08-05
响应两次是因为分别在按下和弹起截获了两次
只要在其中一个状态下作判断就可以
如楼上第一层
  • 打赏
  • 举报
回复
FAICHEN 2003-08-05
nCode为int型

If code is less than zero, the hook procedure must pass the message to the CallNextHookEx function without further processing and should return the value returned by CallNextHookEx.

  • 打赏
  • 举报
回复
andy_lau 2003-08-05
呵呵,不愿献丑
  • 打赏
  • 举报
回复
papaya_stone 2003-08-05
参数就看看MSDN吧。可以用GetKeyState()判断按键的状态。

LRESULT CALLBACK KeyboardProc(int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam) // keystroke-message information
{
if (code == HC_ACTION)
{
if (!(lParam & 0xA0000000))//相应一次
{
if (wParam==0x61 || wParam==0x63)//小键盘1,3:LEFT
{
if(::GetKeyState(VK_CONTROL) >= 0)//Ctrl键没有按下
{

}
else
{

}
  • 打赏
  • 举报
回复
papaya_stone 2003-08-05
参数就看看MSDN吧。可以用GetKeyState()判断按键的状态。

LRESULT CALLBACK KeyboardProc(int code, // hook code
WPARAM wParam, // virtual-key code
LPARAM lParam) // keystroke-message information
{
if (code == HC_ACTION)
{
if (!(lParam & 0xA0000000))//相应一次
{
if (wParam==0x61 || wParam==0x63)//小键盘1,3:LEFT
{
if(::GetKeyState(VK_CONTROL) >= 0)//Ctrl键没有按下
{

}
else
{

}
  • 打赏
  • 举报
回复
相关推荐
发帖
VC/MFC

1.6w+

社区成员

VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
帖子事件
创建了帖子
2003-07-30 02:24
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……