Vista: Lautstärkeregelung hat keinen Effekt
-
Hallo,
ich habe ein Programm, welches mittels der Funkion
waveOutSetVolume(0, (DWORD)New);die Lautstärke regelt.
Bei mir funktioniert dies soweit einwandfrei.
Das Problem ist, dass bei einem Freund die Änderung zwar vorgenommen wird
(waveOutGetVolume() liefert veränderte Werte), man jedoch keinen Unterschied hören kann.Auch ein Zugriff aufs Master-Volume (der bei mir funktioniert), lässt den Rechner weder lauter noch leiser werden.
Wo kann da das Problem liegen?
Falsche Geräte-ID (nicht 0)?
Aber warum geht es dann mit dem Master-Volume auch nicht?Der betreffende benutzt Vista (währeden ich XP habe), aber auch auf seinem Rechner compilte Programme funktionieren nicht besser; ferner ist das Problem bei einem anderen auch schon unter XP aufgetreten.
Vielen Dank im Voraus
SinthorasEdit: Er meinte gerade, dass statt einer Veränderung bei den Lautstärkereglern ein neuer Lautstärkeregler mit Namen des Programmes angezeigt wird bei der normalen Windows Lautstärkeregelung. Ich versteht das nicht...
-
unter vista hat jedes program seine eigenen lautstärke müll oder so. müsste mal nach googlen, is anders als bei xp
-
Und wie greife ich unter Vista aufs Master-Volume zu?
Scheint ja in XP-Manier nicht zu gehen.Danke schonmal für den Ansatz.
-
Sinthoras schrieb:
Und wie greife ich unter Vista aufs Master-Volume zu?
Hast du denn die erfoderlichen Rechte? Vielleicht simuliert Vista die Änderung nur. Evtl das Programm mal mit Admin-Rechten ausführen? Oder halt im Manifest Admin-Rechte anfordern.
-
Die Rechte müssten stimmen, ja
Hier findet sich eine Beschreibung, wie man unter Vista das Master-Volume ändert.
Umgesetzt habe ich es so:
#include <mmdeviceapi.h> #include <endpointvolume.h> #include <stdio.h> #include <windows.h> bool set(unsigned long int New) { HRESULT hr; CoInitialize(NULL); IMMDeviceEnumerator *deviceEnumerator = NULL; hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator); IMMDevice *defaultDevice = NULL; hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice); deviceEnumerator->Release(); deviceEnumerator = NULL; IAudioEndpointVolume *endpointVolume = NULL; hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume); defaultDevice->Release(); defaultDevice = NULL; float newVolume = float(New)/0xFFFF; // Werte zwischen 0 und 1 hr = endpointVolume->SetMasterVolumeLevelScalar(newVolume, NULL); return hr;Die Funktion ändert aber auch wieder nur das Volume des jeweiligen Programms.
Wie führe ich das unter Vista mit Admin-Rechten aus (falls es daran liegt)?(Bzw. was muss mein Freund machen, um es unter Admin-Rechten auszuführen?)
Edit: Rechtsklick->Ausführen als ... Administrator bringt nichts, er regelt dann nicht mal mehr den Lautstärkeregler des Programms herunter
-
Ok, ich nehme alles zurück...
Die Funktion kann nicht compilet werden.
Er findet die Header nicht...
Wo kann ich denn die (und alle libs, die ich evtl auch noch brauche...) herbekommen?P.S.: Wie kann ich den Präprozessor prüfen lassen, ob ich auf Vista arbeite?
#ifdef ??? ?
-
Hast Du das entsprechende SDK installiert?
-
Nein, ich finde leider nur dieses hier von microsoft.com.
Das ist aber 2GB groß, ein Installer für Vista, enthält noch Compiler, Debugger, blabla
Das brauch ich ja alles nicht.
Weiß jemand, wo ich einfach den Kram herbekomme, den ich brauche, um die nötigen Header-Files etc. für meinen MinGW zur Verfügung zu haben?Und noch eine Sache:
Wie kann ich per Präprozessordirektive ziwschen XP und Vista unterscheiden?Danke
Sinthoras
-
In diesem Paket sind die Header! Es gibt nichts kleineres, Du musst das ja nicht installieren.
Wie die Header unter den einzelnen Windows Versionen unterschieden werden steht hier:
http://msdn.microsoft.com/en-us/library/aa383745(VS.85).aspx
-
Ok, sehr vielen Dank für die schnelle Hilfe.
Ich hab meinem Vista-nutzenden Freund das SDK ans Herz gelegt. Sobald er das hat, kann ich mein Programmm dann protieren.LG
Sinthoras