局部钩子捕获ALT组合键失败

maomao85 2014-05-22 02:57:19

LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{

if ( code == HC_ACTION && lParam & 0x40000000)
{
CString hotkey=_T("");
char press;
if (GetKeyState(VK_CONTROL)&0x8000 && wParam>=48 && wParam<=57 )
{
press=wParam;
hotkey.Format(_T("Ctrl+%c"),press);
DoFunction(hotkey);
}
else if (GetKeyState(VK_CONTROL)&0x8000 && wParam>=VK_NUMPAD0 && wParam<=VK_NUMPAD9 )
{
int n= wParam-VK_NUMPAD0;
press=48+n;
hotkey.Format(_T("Ctrl+%c"),press);
DoFunction(hotkey);
}

else if (GetKeyState(VK_MENU)&0x8000 && wParam>=48 && wParam<=57)
{
press=wParam;
hotkey.Format(_T("Alt+%c"),press);
DoFunction(hotkey);
}
else if (GetKeyState(VK_MENU)&0x8000 && wParam>=VK_NUMPAD0 && wParam<=VK_NUMPAD9 )
{
int n= wParam-VK_NUMPAD0;
press=48+n;
hotkey.Format(_T("Alt+%c"),press);
DoFunction(hotkey);
}

}
return CallNextHookEx(hook,code,wParam,lParam);
}


GetKeyState(VK_CONTROL)&0x8000 && wParam>=48 && wParam<=57 可以捕获Ctrl+1
但是GetKeyState(VK_MENU)&0x8000 && wParam>=48 && wParam<=57 就不能捕获Alt+1
...全文
146 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
maomao85 2014-05-26
  • 打赏
  • 举报
回复
没人吗?没人吗?
wyx100 2014-05-23
  • 打赏
  • 举报
回复
引用 1 楼 jacky_qiu 的回复:
win7+vs2008 express 下通过:


LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam, LPARAM lParam)
{
	if(code <0)
		return CallNextHookEx(g_hKeyboard,code,wParam,lParam);

	UINT nChar=wParam;

	switch (nChar)
	{
	case 'B':
		{
			if ( HIWORD(lParam) &  KF_ALTDOWN )
			{
				trace("alt+B");
			}
		}
		break;
	}

	

	return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
}

maomao85 2014-05-22
  • 打赏
  • 举报
回复
引用 1 楼 jacky_qiu 的回复:
win7+vs2008 express 下通过:


LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam, LPARAM lParam)
{
	if(code <0)
		return CallNextHookEx(g_hKeyboard,code,wParam,lParam);

	UINT nChar=wParam;

	switch (nChar)
	{
	case 'B':
		{
			if ( HIWORD(lParam) &  KF_ALTDOWN )
			{
				trace("alt+B");
			}
		}
		break;
	}

	

	return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
}

为什么ALT键的时候 GetKeyState(VK_MENU)&0x8000 && wParam>=48 && wParam<=57 lParam & 0x40000000 失效了啊
jacky_qiu 2014-05-22
  • 打赏
  • 举报
回复
win7+vs2008 express 下通过:


LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam, LPARAM lParam)
{
	if(code <0)
		return CallNextHookEx(g_hKeyboard,code,wParam,lParam);

	UINT nChar=wParam;

	switch (nChar)
	{
	case 'B':
		{
			if ( HIWORD(lParam) &  KF_ALTDOWN )
			{
				trace("alt+B");
			}
		}
		break;
	}

	

	return CallNextHookEx(g_hKeyboard,code,wParam,lParam);
}

15,979

社区成员

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

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