禁用无效系统按键时的MessageBeep

7

问题很简单,通常情况下,如果用户按下Alt +任何键并且没有与之相关联的热键,程序将产生MessageBeep声音。我可以调用哪些API函数来避免这种情况?

在我的主WndProc上处理WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN和WM_SYSKEYUP,都返回0也不起作用。

2个回答

9

你要找的是WM_MENUCHAR。可以在MSDN上搜索(>message beep shortcut<或>message beep accelerator<)。

http://msdn.microsoft.com/en-us/library/ms646349(VS.85).aspx

编辑:似乎只适用于活动菜单。
编辑2:非常有效。注意MSDN:

处理此消息的应用程序应在返回值的高位字中返回以下值之一。

我使用了MNC_CLOSE << 16


太好了。非常感谢,否则我可能永远都不会明白那个问题。 - kaykun

1

我认为这是一个系统设置。控制面板+声音+声音选项卡。不确定哪个会做到这一点,我关闭了很多。也许是“程序错误”。


这是对于本地问题的全局解决方案。有没有一种方法可以禁用程序发出导致程序错误声音播放的消息? - Scott Chamberlain
是的,我能理解第一句话可能有点误导,但我想在我的程序中以编程方式禁用这个 MessageBeep。 - kaykun
1
不,程序不应该覆盖用户的偏好设置。或者更直接地说,程序员不应该把个人喜好强加给用户。同样的事情也适用于字幕大小、字体、颜色、任务栏、屏幕分辨率等等。如果有人打开了蜂鸣声,通常是有充分理由的。可能是某种残疾。你为什么要打开它呢? - Hans Passant
我不记得曾经打开过那样的东西。我知道有些程序可以处理Alt+Enter而不必调用MessageBeep,所以我知道这是可能的。 - kaykun
Alt+Enter的意义是什么?当它哔哔声响起时,焦点在哪种窗口上? - Hans Passant
Alt+Enter在一些程序中用于切换全屏/窗口模式,这也是我想要做的。对于我的测试程序,我实际上使用了在VC++创建新的Win32应用程序项目时自带的默认示例程序。 - kaykun

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