Quello che stai chiedendo non è possibile su XP; il sistema operativo semplicemente non supporta i livelli di volume per applicazione.
È possibile ottenere ciò che si desidera creando una classe di impostazioni che mantenga le cose come SoundActive: Boolean
o PlaySounds: Boolean
o qualcosa di simile. Inseriscilo nella propria unità e disponi di una sezione di inizializzazione che ne crea un'istanza e una sezione di finalizzazione che la libera (rendendola efficacemente una raccolta di valori globali).
Ogni unità che deve accedere a queste impostazioni utilizza semplicemente l'unità che le contiene e regola il comportamento di conseguenza. Così ciascuna delle vostre classi figlie o forme o qualsiasi altra cosa avrebbe solo bisogno di un controllo aggiunto:
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
La classe impostazioni può anche contenere metodi che tengono traccia del livello di volume corrente (su XP, il livello a livello di sistema), e metodi per aumentare o diminuire il volume usando le funzioni di volume MMSystem
(ci sono un sacco di esempi qui e tramite Google di farlo). La tua app può quindi utilizzare gli eventi OnActivate
e OnDeactivate
per impostare il livello del volume quando l'app diventa attiva e ripristinarla sul volume corretto quando l'app perde il focus.
In Vista e versioni successive, è possibile utilizzare l'interfaccia IAudioEndPointVolume
ho menzionato in precedenza e sia le GetMasterVolumeLevel
o SetMasterVolumeLevel
metodi per controllare un'ampia volume di sistema (ho un esempio di fare questo, insieme con le appropriate MMDevAPI
definizioni di interfaccia) o il livello di dispositivo volume (usando IMMDevioce.Activate
per selezionare prima il dispositivo appropriato e poi i metodi IAudioEndPointVolume
sopra l'interfaccia del dispositivo ricevuti da IMMDevice.Activate
nel parametro ppInterface
).
per le singole applicazioni, si utilizza l'interfaccia ISimpleAudioVolume
, che ha quattro metodi: GetMasterVolume
e SetMasterVolume
, che controllano il livello di volume per la sessione audio della vostra applicazione, e GetMute
e SetMute
per consentire di recuperare l'attuale valore del flag mute o impostare rispettivamente. (Larry Osterman of MS, che era uno degli sviluppatori che ha lavorato al nuovo supporto audio in Vista e Win7, ha un ottimo starting point article sul suo blog sui tipi di audio nella nuova API e su quando utilizzare ciascuno di essi.
È concettualmente possibile determinare in fase di esecuzione quale sistema operativo si sta utilizzando e passare da una modalità di programmazione all'altra utilizzando la funzionalità su XP e versioni precedenti e la funzionalità MMDevAPI
su Vista e versioni successive. Tuttavia, aspettarsi che qualcuno qui fornisca il codice per farlo è un po 'irragionevole. I link che ho fornito dovrebbero farti iniziare sulla strada giusta, e quando ti imbattono in ostacoli lungo il percorso l'aiuto specifico nel lavorare attraverso quegli ostacoli potrebbe essere una grande domanda.
fonte
2012-11-02 13:01:24
Date un'occhiata a questa domanda: http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi
per quello che mi ricordo, XP non aveva livello sonoro per applicazione. Avresti alcune API di uscita audio centralizzate nell'applicazione e lì potrai attivare o disattivare l'API di Windows o semplicemente ignorare e disporre –
WinXP non dispone di funzionalità di controllo audio per applicazione. Questo è stato aggiunto in Vista e utilizza un'API completamente nuova (nuova) per farlo, con nuove interfacce aggiunte per supportarlo. Larry Osterman (uno dei veterani della SM) aveva una serie sulle nuove API audio sul suo blog; Non ho un link ad esso su questa macchina, ma dovresti essere in grado di trovarlo con Google. Ci sono post su questo su SO in C/C++. Ricordo di aver visto anche un po 'di tempo fa; Vedrò se riesco a trovare un termine di ricerca da utilizzare per trovarli. –