钩子相关1

提示: 如果要设置系统级钩子, 钩子函数必须在 DLL 中.
SetWindowsHookEx(
  idHook: Integer;   {钩子类型}
  lpfn: TFNHookProc; {函数指针}
  hmod: HINST;       {包含钩子函数的模块(EXE、DLL)句柄; 一般是 HInstance; 如果是当前线程这里可以是 0}
  dwThreadId: DWORD  {关联的线程; 可用 GetCurrentThreadId 获取当前线程; 0 表示是系统级钩子}
): HHOOK;            {返回钩子的句柄; 0 表示失败}

//钩子类型 idHook 选项:
WH_MSGFILTER       = -1; {线程级; 截获用户与控件交互的消息}
WH_JOURNALRECORD   = 0{系统级; 记录所有消息队列从消息队列送出的输入消息, 在消息从队列中清除时发生; 可用于宏记录}
WH_JOURNALPLAYBACK = 1{系统级; 回放由 WH_JOURNALRECORD 记录的消息, 也就是将这些消息重新送入消息队列}
WH_KEYBOARD        = 2{系统级或线程级; 截获键盘消息}
WH_GETMESSAGE      = 3{系统级或线程级; 截获从消息队列送出的消息}
WH_CALLWNDPROC     = 4{系统级或线程级; 截获发送到目标窗口的消息, 在 SendMessage 调用时发生}
WH_CBT             = 5{系统级或线程级; 截获系统基本消息, 譬如: 窗口的创建、激活、关闭、最大最小化、移动等等}
WH_SYSMSGFILTER    = 6{系统级; 截获系统范围内用户与控件交互的消息}
WH_MOUSE           = 7{系统级或线程级; 截获鼠标消息}
WH_HARDWARE        = 8{系统级或线程级; 截获非标准硬件(非鼠标、键盘)的消息}
WH_DEBUG           = 9{系统级或线程级; 在其他钩子调用前调用, 用于调试钩子}
WH_SHELL           = 10; {系统级或线程级; 截获发向外壳应用程序的消息}
WH_FOREGROUNDIDLE  = 11; {系统级或线程级; 在程序前台线程空闲时调用}
WH_CALLWNDPROCRET  = 12; {系统级或线程级; 截获目标窗口处理完毕的消息, 在 SendMessage 调用后发生}

UnhookWindowsHookEx - 卸掉钩子


UnhookWindowsHookEx(
  hhk: HHOOK {钩子句柄}
): BOOL;     {True/False}

CallNextHookEx - 调用下一个钩子

CallNextHookEx(
  hhk: HHOOK;     {当前钩子的句柄}
  nCode: Integer; {钩子代码; 就是给下一个钩子要交待的}
  wParam: WPARAM; {要传递的参数; 由钩子类型决定是什么参数}
  lParam: LPARAM  {要传递的参数; 由钩子类型决定是什么参数}
): LRESULT;       {会返回下一个钩子执行后的返回值; 0 表示失败}

//参数 nCode 的可选值:
HC_ACTION      = 0;     {}
HC_GETNEXT     = 1;     {}
HC_SKIP        = 2;     {}
HC_NOREMOVE    = 3;     {}
HC_NOREM = HC_NOREMOVE; {}
HC_SYSMODALON  = 4;     {}
HC_SYSMODALOFF = 5;     {}
 
posted @   lucken  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示