Ich muss Master-Volume in Windows 10 ändern, aber ich kann nur die Lautstärke meiner Anwendung ändern. Jemand weiß, wie geht das in C?Master-Sound-Management-Fenster 10
Vielleicht Windows-API verwenden?
Ich muss Master-Volume in Windows 10 ändern, aber ich kann nur die Lautstärke meiner Anwendung ändern. Jemand weiß, wie geht das in C?Master-Sound-Management-Fenster 10
Vielleicht Windows-API verwenden?
Seit Windows Vista haben wir:
Sie müssen die endpoint volume ändern. Sie benötigen also die Schnittstelle IAudioEndpointVolume.
Die Schritte in dem folgenden Code ist ein IMMDeviceEnumerator
zu erhalten. Mit dem Enumerator erhalten Sie das Standard-Audio-Ende mit GetDefaultAudioEndpoint
. In der IAudioEndpointVolume
Schnittstelle finden Sie Get/SetMasterVolumeLevel
Der folgende Beispielcode wird von Larry Osterman's blog genommen. Beachten Sie, dass keine Fehlerprüfung stattfindet.
#include <stdio.h>
#include <windows.h>
#include <tchar.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
void Usage()
{
printf("Usage: \n");
printf(" SetVolume [Reports the current volume]\n");
printf(" SetVolume -d <new volume in decibels> [Sets the current default render device volume to the new volume]\n");
printf(" SetVolume -f <new volume as an amplitude scalar> [Sets the current default render device volume to the new volume]\n");
}
int _tmain(int argc, _TCHAR* argv[])
{
HRESULT hr;
bool decibels = false;
bool scalar = false;
double newVolume;
if (argc != 3 && argc != 1)
{
Usage();
return -1;
}
if (argc == 3)
{
if (argv[1][0] == '-')
{
if (argv[1][1] == 'f')
{
scalar = true;
}
else if (argv[1][1] == 'd')
{
decibels = true;
}
}
else
{
Usage();
return -1;
}
newVolume = _tstof(argv[2]);
}
// -------------------------
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 currentVolume = 0;
endpointVolume->GetMasterVolumeLevel(¤tVolume);
printf("Current volume in dB is: %f\n", currentVolume);
hr = endpointVolume->GetMasterVolumeLevelScalar(¤tVolume);
printf("Current volume as a scalar is: %f\n", currentVolume);
if (decibels)
{
hr = endpointVolume->SetMasterVolumeLevel((float)newVolume, NULL);
}
else if (scalar)
{
hr = endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
}
endpointVolume->Release();
CoUninitialize();
return 0;
}
Danke dafür, aber Ich habe ein Problem: 'unbekannter Typname '_TCHAR'; meinst du 'PTCHAR'? ' – Una
Nur' #include
Es ist gut! Nun habe ich viele Fehler wie: 'expected expression before MMDeviceEnumerator' oder' 'IMMDeviceEnumerator {aka struct IMMDeviceEnumerator}' hat kein Member 'GetDefaultAudioEndpoint' | 'oder '' IMMDevice {aka struct IMMDevice} 'hat kein Mitglied namens' Activate '| ' – Una
Siehe [Endpoint Lautstärkeregler] (https://msdn.microsoft.com/en-us/library/windows/desktop/dd370839 (v = VS.85) .aspx). –
Ich habe ein Problem mit #include "Keine solche Datei oder Verzeichnis", aber ich lade es herunter, legte MinGW/include aber es ist das gleiche, und #include auch –
Una