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

gnuljf 2003-07-30 02:24:34
在键盘钩子的回调中有三个参数:nCode,wParam,lParam
我不是很明白这些参数的作用。
nCode有些资料中是判断其是否大于0,有些又是判断其是否与HC_ACTION相等。究竟它指示的是什么意思?
从wParam,lParam中能否判断功能键状态(Ctrl,Shift,Alt)?应该怎样判断?
而且为什么总是得到两次反应?
...全文
191 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
gnuljf 2004-02-24
  • 打赏
  • 举报
回复
唉,结贴吧,已经很久了。
Coder 青田 2003-11-13
  • 打赏
  • 举报
回复
上面已经说的很清楚了~~
注意这里:
if (!(lParam & 0xA0000000))//相应一次
这样以后就只有一次反应了~~
gnuljf 2003-11-02
  • 打赏
  • 举报
回复
msdn中净是e文看不明白啊
__________________ 2003-10-09
  • 打赏
  • 举报
回复
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
{

}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

试试用AI创作助手写篇文章吧