关于勾子回调函数中参数的问题

slmax1 2009-11-17 02:46:13
回调函数参数如下
nCode:Integer;wParam:WPARAM;lParam:LPARAM

nCode究竟代表什么。nCode<0是什么意思 action又是什么意思


为什么<0的时候要调用callnextHookex


...全文
133 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hjkto 2009-11-18
  • 打赏
  • 举报
回复
先了解什么是回调函数。我的理解是这样的: 回调函数写出来不是自己的程序去调用的,反而是让其他的东西去调用,比如windows操作系统,比如其他的程序等等之类的。...

但是什么时候被调用却不知道了。回调函数一般是按照调用者的要求定义好参数和返回值的类型,你向调用者提供你的回调函数的入口地址,然后调用者有什么事件发生的时候就可以随时按照你提供的地址调用这个函数通知你,并按照预先规定好的形式传递参数。所以很多人打比方,说回调函数还真有点像您随身带的BP机:告诉别人号码,在它有事情时Call您!

所以一个回调函数写出来之后,一定有个注册的动作,就是告诉调用者,你怎么样找到我写的函数。
slmax1 2009-11-18
  • 打赏
  • 举报
回复
nCode 在大于0 等于0 或者小于0的时候分别代表什么?

主要是想把这个问题弄清楚
slmax1 2009-11-18
  • 打赏
  • 举报
回复
但是有一点我想要说的是,回调函数里面的nCode的值是怎么触发的,什么时候为0 什么时候不为0
slmax1 2009-11-18
  • 打赏
  • 举报
回复
所以一个回调函数写出来之后,一定有个注册的动作,就是告诉调用者,你怎么样找到我写的函数。


这句话把我点醒了
gyk120 2009-11-17
  • 打赏
  • 举报
回复
HC_ACTION=0
slmax1 2009-11-17
  • 打赏
  • 举报
回复
高手们都来呀。
slmax1 2009-11-17
  • 打赏
  • 举报
回复
那我如何判断有没有别的钩子存在?
rogueskilldan 2009-11-17
  • 打赏
  • 举报
回复
nCode传递到钩子例程的钩子代码。
当有别的钩子存在,则用callnextHookex 把值往下传递~~
slmax1 2009-11-17
  • 打赏
  • 举报
回复
  //回调函数
function HookProc(nCode:Integer;wParam:WPARAM;lParam:LPARAM):Integer;stdcall
begin
if nCode=HC_ACTION then
if wParam=WM_RBUTTONDOWN then
begin
i:=i+1;
ShowMessage(IntToStr(i));
result:=1; //这是什么意思
end;

if nCode <0 then //为什么加入下面的这段代码鼠标就能够正常左右键,不加的话鼠标左右键就被禁止了
Result:=CallNextHookEx(gHook,nCode,wParam,lParam);

end;
slmax1 2009-11-17
  • 打赏
  • 举报
回复
也就是说nCode什么时候为HC_ACTION 什么时候为0
slmax1 2009-11-17
  • 打赏
  • 举报
回复
还有这个nCode的值是由什么来决定的?
rogueskilldan 2009-11-17
  • 打赏
  • 举报
回复
如果 CallNextHookEx 成功, 它会返回下一个钩子的返回值, 是个连环套;
如果 CallNextHookEx 失败, 会返回 0, 这样钩子链也就断了, 只有当前钩子还在执行任务.

不同类型的钩子函数的返回值是不同的, 对键盘钩子来讲如果返回一个非 0 的值, 表示它处理完以后就把消息给消灭了.
换句话说:
如果给键盘的钩子函数 Result := 0; 说明消息被钩子拦截并处理后就给 "放" 了;
如果给键盘的钩子函数 Result := 1; 说明消息被钩子拦截并处理后又给 "杀" 了.

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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