如何禁用Alt键的常规行为?

9
通常情况下Alt键在Windows中用于打开菜单。
我需要禁用它,因为我需要Alt键来控制我的应用程序。(这是一款旧电脑的模拟器,所以我需要模仿它的行为。)我使用纯Windows API编写,因此我预计必须有一些消息被发送并且需要被禁用、丢弃或忽略。
Alt+Tab没有问题,以及其他系统键和组合键,我只需要在打开菜单时忽略Alt键。
(我的应用程序使用DirectInput读取键盘输入,所以它可以正常工作。我只需要禁用用Alt键打开菜单的功能即可,我将使用鼠标打开菜单。)

这是什么菜单?我刚在 Windows 上按了 Alt 键,但没有弹出菜单。 - Kaz
1
@Kaz:它将焦点设置为当前窗口的菜单栏。 - Cody Gray
1个回答

17

可以检查 WM_SYSCOMMAND,当 wParam 是 SC_KEYMENU 时返回 0?

更新 / 确切解决方案:

if(wParam==SC_KEYMENU && (lParam>>16)<=0) return 0;
return DefWindowProc(hwnd, message, wParam, lParam);

描述:如果 lParam>>16 是正数,则菜单是由鼠标触发的,如果为零或负数,则菜单是由 Alt 或 Alt+某个键触发的。


这帮助我找到了正确的解决方案。我将该解决方案添加到了这个答案中。 - Al Kepp
也帮了我大忙。这个问题非常可怕,ALT键和其他几个键在Windows 8上不断干扰Win32应用程序。此外,感谢您提供的简短描述,它使得理解正在发生的事情更加清晰。在此之前,我从未知道lParam或wParam的用途,因为它在我的需求中从来没有被过多使用。 - Jeremy Trifilo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接