To, o co prosisz, nie jest możliwe w XP; system operacyjny po prostu nie obsługuje poziomów głośności poszczególnych aplikacji.
Możesz osiągnąć to, co chcesz, tworząc klasę ustawień, która utrzymuje rzeczy takie jak SoundActive: Boolean
lub PlaySounds: Boolean
lub coś podobnego. Umieść go w swojej jednostce i posiada sekcję inicjalizacji, która tworzy jej instancję i sekcję finalizacji, która uwalnia ją (czyniąc ją skutecznie zbiorem wartości globalnych).
Każda jednostka, która potrzebuje dostępu do tych ustawień, po prostu używa jednostki, która je zawiera i odpowiednio dostosowuje zachowanie. Tak więc każdy z twoich zajęciach dziecko lub formach lub cokolwiek to wystarczy sprawdzenie dodanych:
if CurrentSettings.PlaySounds then
// Code that makes sounds, plays music, whatever.
Klasa ustawienia mogą również zawierać metody, które śledzić aktualny poziom głośności (na XP, poziom całego systemu), oraz metody zwiększania lub zmniejszania głośności za pomocą funkcji głośności MMSystem
(istnieje mnóstwo przykładów tutaj i za pośrednictwem Google). Twoja aplikacja może wtedy używać zdarzeń OnActivate
i OnDeactivate
, aby ustawić poziom głośności, gdy aplikacja zacznie się skupiać, i przywrócić ją do właściwego poziomu głośności, gdy aplikacja utraci ostrość.
W Vista i wyżej, można użyć interfejsu IAudioEndPointVolume
wspominałem wcześniej i albo GetMasterVolumeLevel
lub SetMasterVolumeLevel
metody kontrolowania szeroki woluminu systemowego (mam przykład w ten sposób, wraz z odpowiednimi definicjami interfejsów MMDevAPI
) lub poziomu urządzenia głośność (za pomocą IMMDevioce.Activate
wybierz najpierw właściwe urządzenie, a następnie powyższe metody IAudioEndPointVolume
na interfejsie urządzenia otrzymane od IMMDevice.Activate
w parametrze ppInterface
).
Dla poszczególnych aplikacji, należy użyć interfejsu ISimpleAudioVolume
, który ma cztery metody: GetMasterVolume
i SetMasterVolume
, które kontrolują poziom głośności sesji audio w aplikacji i GetMute
i SetMute
co pozwala odzyskać bieżący wyciszenia wartość flagi lub ustawić to odpowiednio. (Larry Osterman ze stwardnienia rozsianego, który był jednym z twórców, którzy pracowali nad nowym wsparciem audio w Vista i Win7, ma świetny starting point article na swoim blogu o rodzajach audio w nowym API i kiedy użyć każdego z nich.)
Można w sposób koncepcyjny określić w czasie wykonywania systemu operacyjnego, którego używasz, i programowo przełączać między używaniem funkcji MMSystem
w systemie XP i wcześniejszych, a funkcją MMDevAPI
w systemie Vista i nowszych. Oczekiwanie, że ktoś tu przedstawi kod, jest jednak trochę nierozsądne. Linki, które podaję, powinny zacząć od właściwej ścieżki, a kiedy natkniesz się na przeszkodę, konkretna pomoc w pracy z tymi przeszkodami będzie świetnym pytaniem.
Wystarczy popatrzeć na to pytanie: http://stackoverflow.com/questions/1092466/windows-xp-mute-unmute-audio-in-programmatically-in-python – Sebi
dla tego co pamiętam, nie miał XP poziom dźwięku przypadający na aplikację. Będziesz mieć centralne wyjście dźwiękowe API w swojej aplikacji i tam przełączasz, jeśli wypuścisz go do Windows API lub po prostu zignorujesz i zrzekniesz –
WinXP nie ma możliwości sterowania dźwiękiem aplikacji. Zostało to dodane w systemie Vista i wykorzystuje do tego zupełnie osobny (nowy) interfejs API, dodając nowe interfejsy do obsługi tego systemu. Larry Osterman (jeden ze starzy-starzy MS) miał serię nowych API dźwięku na swoim blogu; Nie mam linku do tego na tym komputerze, ale powinieneś być w stanie go znaleźć przez Googling. Na tym są posty na SO w C/C++. Pamiętam, że widziałem jakiś czas temu; Zobaczę, czy mogę znaleźć wyszukiwany termin, którego użyjesz, aby je znaleźć. –