Winapi 在WM_SYSKEYDOWN中吃键
当按下alt或F10时,我需要处理发送到我的窗口的WM_SYSKEYDOWN消息,所以我在我的窗口的pretranslatemessage中这样做了 我检查了发送给WM_SYSKEYDOWN的MSG参数消息,并返回了true,这与此类似Winapi 在WM_SYSKEYDOWN中吃键,winapi,visual-c++,Winapi,Visual C++,当按下alt或F10时,我需要处理发送到我的窗口的WM_SYSKEYDOWN消息,所以我在我的窗口的pretranslatemessage中这样做了 我检查了发送给WM_SYSKEYDOWN的MSG参数消息,并返回了true,这与此类似 BOOL Class::PreTranslateMessage(MSG* pMsg) { MSG *pMessage = (MSG *)pMsg; HWND hwnd = ::GetActiveWindow(); if(::IsWindo
BOOL Class::PreTranslateMessage(MSG* pMsg)
{
MSG *pMessage = (MSG *)pMsg;
HWND hwnd = ::GetActiveWindow();
if(::IsWindowEnabled(hwnd)==NULL){
if(pMsg->message = WM_SYSKEYDOWN)
{
return true;
}
}
return parentclass::PreTranslateMessage(pMsg);
}
但当用户按下alt键时,不会触发此功能
我在spy++中验证了当用户单击alt键时,WM_SYSKEYDOWN消息被发送到我为其编写pretranslatemessage的窗口
我可以通过编写消息处理程序来解决此问题
void Class::OnSysKeyDown(UINT nChar,UINT nRepCnt,UINT nFlags)
{
HWND hwnd = ::GetActiveWindow();
if(::IsWindowEnabled(hwnd)==NULL){
return;
}
parentclass::OnSysKeyDown(nChar,nRepCnt,nFlags);
}
在消息映射中包含WM\U SYSKEYDOWN,我在看到你的帖子后有点好奇,所以我做了一个快速测试,正如预期的那样,WM\U SYSKEYDOWN肯定会在Alt-F10组合中发送(因为该消息专门针对Alt组合键)。事实上,您将收到4条消息,结果如下:
Message Key Char Repeat Scan Ext Alt Prev Tran
-----------------------------------------------------------------------------
WM_SYSKEYDOWN 18 Alt 1 56 No Yes Up Down
WM_SYSKEYDOWN 121 F10 1 68 No Yes Up Down
WM_SYSKEYUP 121 F10 1 68 No Yes Down Up
WM_SYSKEYUP 18 Alt 1 56 No No Down Up
因此,请仔细检查您的代码,我相信您将确定问题所在。我希望这有帮助 有必要指出Pretransaltemessage()拼写错误吗?它可能是,C++编译器不闪烁时,你扔GobDeDeGook在这样。它盲目地假设您创建了一个新的虚拟方法,而没有重写PreTranslateMessage()。C++11 override关键字已过期-1用于发布不可能编译的垃圾代码。很抱歉,我打错了。唉,这仍然是无法编译的无意义代码。你还是拼错了。你到底为什么不复制/粘贴你在程序中使用的代码???对IsWindowEnabled的检查写错了。如果窗口已启用,则函数返回布尔值非零。NULL表示空指针,不应用于此目的。PreTranslate不是WinApi。这是MFC还是ATL还是什么?这个问题仅仅是草率的编码吗?