拦截Win键的处理问题

kid5 2005-03-24 12:41:25
我写了一个钩子函数,对于非特殊的按键方式,可成功拦截Win键;但是特殊按键就会出现问题。

如:当拦截程序运转后,单击Win键会失效,即Windows开始菜单不会弹出。这时,快速连击(两次以上即可)则会发现Windows出现粘滞键状况(不明白粘滞键的请查询windows帮助),这时需要单击Win键才能消除该状态,但是单击Win键会被拦截,因此状态则无法消除了,出现状况:按任意键都相对于 所按键+win键 的效果。根据windows帮助设置“按两次键修改”的设置,问题依然。

请大侠看看怎么处理比较好?


拦截函数如下:

HHOOK glhHook;

LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;
PKBDLLHOOKSTRUCT p = NULL;
APP_CONF AppConf = ((CUnwinApp*)AfxGetApp())->m_AppConf;
if (nCode == HC_ACTION)
{
p = (PKBDLLHOOKSTRUCT) lParam;
switch (wParam)
{
case WM_KEYDOWN:
// // Backdoor to user information
// if (p->vkCode == VK_F8)
// {
// ::MessageBox(NULL,"Let's make things better and better!\n","HQ Tech",MB_OK);
// break;
// }
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
fEatKeystroke = (p->vkCode == VK_LWIN) || (p->vkCode == VK_RWIN) || // 屏蔽Win
// 屏蔽Alt+Tab
((p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Alt+Esc
((p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0)) ||
// 屏蔽Ctrl+Esc
((p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0))) ;


break;
default:
break;
}
}

return (fEatKeystroke ? TRUE : CallNextHookEx(glhHook,nCode,wParam,lParam));
}
...全文
151 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
kid5 2005-03-25
  • 打赏
  • 举报
回复
谢谢大家,问题解决
xuzheng318 2005-03-24
  • 打赏
  • 举报
回复
This value is returned by the next hook procedure in the chain. The current hook procedure must also return this value. The meaning of the return value depends on the hook type. For more information, see the descriptions of the individual hook procedures
sinall 2005-03-24
  • 打赏
  • 举报
回复
在处理完Win键后,程序就return试试,不要CallNextHookEx。
DentistryDoctor 2005-03-24
  • 打赏
  • 举报
回复
如果是只拦截组合键,应该结合GetAsyncKeyState,对于过滤了的键,应该直接返回-1.
老夏Max 2005-03-24
  • 打赏
  • 举报
回复
学习!关注!
oyljerry 2005-03-24
  • 打赏
  • 举报
回复
CallNextHookEx是为了保证继续传递消息,否则,可能出现系统问题

15,471

社区成员

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

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