2010-09-07 4 views
5

Problema semplice, normalmente un programma produrrà un MessageBeep se l'utente preme Alt + Qualunque e non è associato alcun tasto di scelta rapida. Quali funzioni API posso chiamare per evitarlo?Disabilita MessageBeep su Syskeypress non valido

Gestione di WM_KEYDOWN, WM_KEYUP, WM_SYSKEYDOWN e WM_SYSKEYUP con ritorno 0; sul mio WndProc principale non funziona.

risposta

6

WM_MENUCHAR dovrebbe essere quello che stai cercando. La ricerca MSDN è un amico (> messaggio abbreviazione del tono breve < o> messaggio acceleratore di segnale acustico <).

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

Edit: sembra essere solo per i menu attivi.
Modifica 2: funziona come un fascino. nota MSDN:

Un'applicazione che elabora questo messaggio dovrebbe restituire uno dei seguenti valori nella parola -alto ordine del valore di ritorno.

Ho usato MNC_CLOSE << 16.

+0

Perfetto. Molte grazie; Probabilmente non l'avrei mai ottenuto diversamente. – kaykun

1

Penso che questa sia un'impostazione di sistema. Pannello di controllo + Suoni + scheda Suoni. Non sono sicuro di quale sia, ne ho molti spenti. Forse "Errore programma".

+0

Questa è una soluzione globale a un problema locale. C'è un modo per disabilitare un programma dall'emettere il messaggio che fa riprodurre il suono dell'errore del programma? –

+0

Sì, posso vedere come la prima frase può essere un po 'fuorviante, ma voglio disabilitare questo MessageBeep in modo programmatico all'interno del mio programma. – kaykun

+1

No, i programmi * non * dovrebbero ignorare le preferenze dell'utente. O per dirla in modo più diretto, un programmatore non dovrebbe forzare le sue preferenze personali all'utente. La stessa cosa vale per cose come le didascalie, i caratteri, i colori, la barra delle applicazioni, la risoluzione dello schermo, ecc. Se qualcuno ha attivato il segnale acustico, di solito è per una buona ragione. Una specie di disabilità, forse. Perché l'hai acceso? –