把嘎嘎 2023-10-17 18:42 采纳率: 41.9%
浏览 6
已结题

windows hook win+L

在用键盘钩子勾win+l

LRESULT keyProc(int code, WPARAM wparam, LPARAM lparam)
{
  KBDLLHOOKSTRUCT* pkbhs = (KBDLLHOOKSTRUCT*)lparam;
  if (HC_ACTION == code)
  {
    if (0x4C == pkbhs->vkCode)//L键
   {
    //do something
    return 1;
    }
  }
  return CallNextHookEx(_keyHook, code, wparam, lparam);
}

SetWindowsHookExW(WH_KEYBOARD_LL, (HOOKPROC)&keyProc, GetModuleHandle(NULL), 0);

代码是这样写的,但是实际情况是电脑仍然响应了win+l 锁屏了,这是什么问题?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-17 20:11
    关注

    【以下回答由 GPT 生成】

    有一个问题导致你的代码无法阻止Win+L组合键的功能。在键盘钩子过程中,你需要处理特定的系统消息WM_SYSCOMMAND,以阻止锁屏操作。

    以下是修改后的代码示例,包含对WM_SYSCOMMAND消息的处理:

    LRESULT CALLBACK keyProc(int code, WPARAM wparam, LPARAM lparam)
    {
      if (HC_ACTION == code)
      {
        KBDLLHOOKSTRUCT* pkbhs = (KBDLLHOOKSTRUCT*)lparam;
        if (WM_SYSCOMMAND == wparam && SC_SCREENSAVE == pkbhs->wParam) // 锁屏消息
        {
          // 处理相关操作
          return 1;
        }
      }
      return CallNextHookEx(NULL, code, wparam, lparam);
    }
    

    在此示例中,我们将WM_SYSCOMMAND消息与SC_SCREENSAVE参数进行比较,以判断是否为锁屏消息。如果是锁屏消息,返回1来阻止锁屏操作。

    请注意,我将函数名更改为keyProc以匹配标准钩子过程的命名约定。此外,我将_keyHook更改为NULL,因为在此示例中我们使用的是全局钩子,而不是特定于线程的钩子。

    希望这能解决你的问题!如果还有更多疑问,请随时问我。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月16日
  • 创建了问题 10月17日

悬赏问题

  • ¥15 the testing results of the whole dataset is empty
  • ¥15 can问题,往哥解决
  • ¥15 FFmpeg 成功推流到 Nginx RTMP 服务器但无法用 ffplay 或 VLC 播放
  • ¥15 请修改以下C语言代码使其能正确输出最短路径
  • ¥20 抖音商城拉码器安卓报错求解决办法或者有新的拉码脚本也可以介绍一下
  • ¥15 MPLAB IDE V2.35 报错make[2]: *** [build/default/production/_ext/1472/MSSP_I2C.p1] Error 1
  • ¥15 Unity2D URP项目TextMeshPro(3D)无法显示文字
  • ¥15 新唐M451 DTMF检测和发送代码修改
  • ¥15 在国外文献网站里点击view pdf 加载异常缓慢甚至加载不出来。
  • ¥65 python批量提取发票的信息