c ++ - Hvordan kan jeg underrette min ansøgning om, at standard lydafspilningsenhed er ændret?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har to lydkort på min Win XP SP3 computer, og jeg har skrevet en C ++ app, som jeg ændrer standard afspilningsenhed ved at redigere følgende registreringsdatabase:


regKey = Registry.CurrentUser.OpenSubKey(@"SoftwareMicrosoftMultimediaSound Mapper", true);


Min app ændrer nøgleværdien 'Afspilning' med det formål at bruge det første eller andet lydkort som standard afspilningsenhed.


Problemet er, at når jeg ændrer standardenheden, bruger applikationen stadig den gamle (som blev angivet som standard, når programmet starter). Hvis jeg efter forandring starter programmet igen, fungerer det fint, og jeg kan bruge den 'nye' standardafspilningsenhed.


Hvordan kan jeg 'fortælle' for min ansøgning, at jeg har ændret standardenheden? På hvilken måde læser og gemmer applikationen variablen ved opstart, hvilken lydenhed er standard i Windows? Er der nogen løsning på mit problem?

Bedste reference


Registreringsdatabasen er i det væsentlige en database, der lagrer standardindstillingerne. Hvis du ændrer værdierne i registreringsdatabasen, forårsager det ikke nogen applikation, heller ikke Windows selv, at geninitialisere dens indstillinger med de nye, opdaterede værdier. Raymond Chen diskuterer dette meget med henvisning til brugergrænsefladeindstillinger. [3]


Overvej også, at ting som dette meget sandsynligt vil ændre sig i nyere versioner af Windows. Hvis du nogensinde vælger at opdatere til Windows Vista eller 7, vil du være her igen og stille flere spørgsmål, fordi din lyd-switcher-applikation ikke længere virker. De senere versioner håndterer lydenheder meget anderledes end de blev håndteret i XP; Til at begynde med er de 'nu baseret på Core Audio API'erne. [4]


Derfor er ændring af registreringsværdier ikke den foretrukne måde at ændre computerens konfiguration af på grund af årsager.


Men hvis du bare prøver at lave en bestemt ansøgning om, at du har ændret værdien i registreringsdatabasen, er den enkle løsning funktionen RegNotifyChangeKeyValue. Dette tegner i det væsentlige applikationen for at modtage underretninger hver gang værdien af ​​en bestemt registreringsnøgle ændres. [5]


Den korrekte løsning til Windows Vista og senere er tilgængelig her.