2010-09-07 4 views
5

Problema simple, normalmente un programa producirá un MessageBeep si el usuario presiona Alt + Whatever y no hay ninguna tecla de acceso directo asociada a él. ¿A qué funciones API puedo llamar para evitar esto?Deshabilitar MessageBeep en Syskeypress no válido

Manejando WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN y WM_SYSKEYUP todo con return 0; en mi WndProc principal no funciona.

Respuesta

6

WM_MENUCHAR debería ser lo que estás buscando. Búsqueda de MSDN es su amigo (> atajo de mensaje beep < o> mensaje de acelerador de tono <).

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

Editar: parece ser sólo para los menús activos.
Editar 2: funciona como un encanto. nota de MSDN:

Una aplicación que procesa este mensaje debe devolver uno de los siguientes valores en la palabra de orden superior del valor de retorno.

He usado MNC_CLOSE << 16.

+0

Perfecto. Muchas gracias; Probablemente nunca hubiera recibido eso de otra manera. – kaykun

1

Creo que se trata de una configuración del sistema. Panel de control + Sonidos + pestaña Sonidos. No estoy seguro de cuál lo hace, tengo muchos de ellos apagados. Tal vez "Error de programa".

+0

Esa es una solución global a un problema local. ¿Hay alguna forma de desactivar un programa para que emita el mensaje que causa la reproducción del sonido de error del programa? –

+0

Sí, puedo ver cómo la primera frase puede ser un poco engañosa, pero quiero desactivar este MessageBeep programáticamente dentro de mi propio programa. – kaykun

+1

No, se supone que * los programas no reemplazan las preferencias del usuario. O para decirlo sin rodeos, se supone que un programador no fuerza sus preferencias personales sobre el usuario. Lo mismo ocurre con cosas como tamaños de leyendas, fuentes, colores, barra de tareas, resolución de pantalla, etc. Si alguien tiene ese pitido encendido, generalmente es por una buena razón. Algún tipo de discapacidad, tal vez. ¿Por qué lo prendiste? –