屏蔽物理键盘一些键码,但模拟键盘正常使用

玉生香 2019-11-06 10:19:56
想屏蔽掉一些物理键盘键 只留下F8 F9这些键盘,
对于模拟键盘可以正常使用(keybd_event),请教如何实现。

通过钩子能否实现,钩住物理键与虚拟键应该如何区别。网上目前找不到很好的资料。请教!!!
...全文
138 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgl7903 2019-11-07
  • 打赏
  • 举报
回复
如果是自己发送的 keybd_event 那就比较简单了, 可以充分使用最后一个参数 dwExtraInfo WM_KEYDOWN WM_KEYUP 中使用 GetMessageExtraInfo 比对 扩展信息, 常规的键盘这个是0

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
  switch (message) 
  {
  case WM_KEYDOWN:
  case WM_KEYUP:
    {
      DWORD dwExt = GetMessageExtraInfo();
      CHAR szDbg[256];
      sprintf(szDbg, "WM_KEYDOWN w=%08X l=%08X ex=%08X\r\n", 
        wParam, lParam, dwExt);
      OutputDebugStringA(szDbg);
      break;
    }
  case WM_LBUTTONDOWN:
    {
      keybd_event('A', MapVirtualKey('A', 0), 0,  0x12345678);
      keybd_event('A', MapVirtualKey('A', 0), KEYEVENTF_KEYUP,  0x87654321);
      break;
    }
  default:
    {
      return DefWindowProc(hWnd, message, wParam, lParam);
    }
  }
  return 0;
}

玉生香 2019-11-07
  • 打赏
  • 举报
回复
引用 5 楼 zgl7903 的回复:
试试低级键盘钩子 WH_KEYBOARD_LL MSDN 的 KBDLLHOOKSTRUCT 说明中有这样的说明 LLKHF_LOWER_IL_INJECTED Test the event-injected (from a process running at lower integrity level) flag. LLKHF_INJECTED Test the event-injected (from any process) flag.
需要再研究看看,看了一会没太看懂。大神能否再细致指点一下。
玉生香 2019-11-07
  • 打赏
  • 举报
回复
引用 4 楼 gouyanfen 的回复:
[quote=引用 3 楼 玉生香 的回复:] [quote=引用 2 楼 gouyanfen 的回复:] [quote=引用 楼主 玉生香 的回复:] 想屏蔽掉一些物理键盘键 只留下F8 F9这些键盘, 对于模拟键盘可以正常使用(keybd_event),请教如何实现。 通过钩子能否实现,钩住物理键与虚拟键应该如何区别。网上目前找不到很好的资料。请教!!!
这方面应该从驱动入手吧[/quote] 钩子里面屏蔽键盘消息,自己进程模拟一些消息,再在钩子里面将自己的消息转换成键盘消息。[/quote] 如果只是针对某些进程,这个方法是可行的[/quote] 针对的是桌面,不针对某个特殊进程界面。 类似,点开桌面一个界面,输入账号,密码。。。等等键盘操作, 通过钩子拦截键盘消息,我的后台进程,会发出一些自定义的消息,钩子拦截到自定义消息,转换成keybd_event消息。 (原来是通过keybd_event直接实现,现在想把物理键盘某些键屏蔽,keybd_event可以正常使用,留下几个启动键盘热键。 )
zgl7903 2019-11-07
  • 打赏
  • 举报
回复
试试低级键盘钩子 WH_KEYBOARD_LL MSDN 的 KBDLLHOOKSTRUCT 说明中有这样的说明 LLKHF_LOWER_IL_INJECTED Test the event-injected (from a process running at lower integrity level) flag. LLKHF_INJECTED Test the event-injected (from any process) flag.
gouyanfen 2019-11-07
  • 打赏
  • 举报
回复
引用 3 楼 玉生香 的回复:
[quote=引用 2 楼 gouyanfen 的回复:] [quote=引用 楼主 玉生香 的回复:] 想屏蔽掉一些物理键盘键 只留下F8 F9这些键盘, 对于模拟键盘可以正常使用(keybd_event),请教如何实现。 通过钩子能否实现,钩住物理键与虚拟键应该如何区别。网上目前找不到很好的资料。请教!!!
这方面应该从驱动入手吧[/quote] 钩子里面屏蔽键盘消息,自己进程模拟一些消息,再在钩子里面将自己的消息转换成键盘消息。[/quote] 如果只是针对某些进程,这个方法是可行的
玉生香 2019-11-07
  • 打赏
  • 举报
回复
引用 2 楼 gouyanfen 的回复:
[quote=引用 楼主 玉生香 的回复:] 想屏蔽掉一些物理键盘键 只留下F8 F9这些键盘, 对于模拟键盘可以正常使用(keybd_event),请教如何实现。 通过钩子能否实现,钩住物理键与虚拟键应该如何区别。网上目前找不到很好的资料。请教!!!
这方面应该从驱动入手吧[/quote] 钩子里面屏蔽键盘消息,自己进程模拟一些消息,再在钩子里面将自己的消息转换成键盘消息。
gouyanfen 2019-11-07
  • 打赏
  • 举报
回复
引用 楼主 玉生香 的回复:
想屏蔽掉一些物理键盘键 只留下F8 F9这些键盘, 对于模拟键盘可以正常使用(keybd_event),请教如何实现。 通过钩子能否实现,钩住物理键与虚拟键应该如何区别。网上目前找不到很好的资料。请教!!!
这方面应该从驱动入手吧
玉生香 2019-11-07
  • 打赏
  • 举报
回复
咋没有人回答

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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