niedziela, 30 stycznia 2011

Dźwięki systemowe Windows

O istnieniu dźwięków systemowych i możliwości ich zmiany poprzez Panel Sterowania zna każdy trochę bardziej świadomy użytkownik systemów Microsoftu. Trochę mniej zdaje sobie sprawę, że ten mechanizm może zostać wykorzystany przez inne programy poza systemem operacyjnym.

Obsługa domyślnie istniejących dźwięków systemowych jest banalna i wymaga użycia funkcji PlaySound z WinApi (wymaga dołączenia biblioteki Winmm.lib). Przykładowo aby odegrać systemowy dźwięk błędu (asynchronicznie):
PlaySound(TEXT("SystemExclamation"), NULL, SND_ALIAS | SND_ASYNC);

Oczywiście używanie dźwięków systemowych nie jest tak ciekawe, jak sprawienie aby użytkownik mógł zmienić schemat dźwięków w naszym programie poprzez Panel Sterowania. Zanim to będzie możliwe najpierw należy dodać informacje o naszej aplikacji do rejestru systemowego.  Informacje o zarejestrowanych aliasach dźwiękowych dla aplikacji zapisane jest w kluczu : HKEY_CURRENT_USER/AppEvents/Schemes/Apps. Tam należy dodać klucz o nazwie naszego pliku wykonywalnego o domyślnej wartości będącej nazwą wyświetlaną. Następnie do gałęzi z naszym kluczem dodajemy klucze reprezentujące aliasy konkretnych dźwięków w których możemy stworzyć klucz .current o wartości bedącej pełną ścieżką do pliku .wav. Aby nasze aliasy były poprawnie wyświetlane należy dodać dla każdego klucz w HKEY_CURRENT_USER/AppEvents/EventsLabels o nazwie takiej jak podaliśmy poprzednio i domyślnej wartości będącej tekstem wyświetlanym.


Odtworzenie tak zadeklarowanych dźwięków jest tak samo proste jak odtworzenie dźwięków systemowych, wymaga dodania jedynie flagi SND_APPLICATION i podania nazwy klucza w rejestrze dźwięku. Jedynie o czym należy pamiętać to, że zmiana nazwy pliku wykonywalnego spowoduje, że dźwięk nie zostanie odtworzony.
PlaySound(TEXT("QWRp_test"), NULL,
          SND_ALIAS | SND_ASYNC | SND_APPLICATION);

Jakie zalety niesie takie rozwiązanie kwestii dźwięku w programach? Pierwsza odpowiedź która się nasuwa to: takie rozwiązanie wymaga mniej pracy :). Dzięki temu nie trzeba tworzyć pliku konfiguracyjnego z dźwiękami aplikacji ani okna w którym można to zmienić. Zmiana dźwięku odbywa się poprzez Panel Sterowania a odtworzenie dźwięku w programie to jedna linijka.

Oczywiście jak każde rozwiązanie i to posiada i wady: Windows obsługuje tylko pliki .wav, zmiana dźwięków poprzez Panel Sterowania może przekraczać możliwości niektórych użytkowników oraz jest po prostu mało wygodne. Nie wspominając, że nie jest przenośne między systemami (nie orientuje się czy tego typu mechanizmy istnieją dla pozostałych systemów).

Mechanizm ten nie jest często wykorzystywany. Aktualnie na moim komputerze jedynym programem (poza systemem operacyjnym) z tego korzystającym jest Visual Studio (co swoją drogą urozmaiciło mi pisanie programów po ustawieniu odpowiednich dźwięków na udaną/nieudaną kompilację :) ).

Brak komentarzy: