如何为 SetMasterVolume 初始化 HRESULT?
How to Initialize HRESULT for SetMasterVolume?
#include <iostream>
#include <windows.h>
#include <Audioclient.h>
int main(){
ShellExecute(NULL, "open", "https://www.youtube.com/watch?v=zf2VYAtqRe0", NULL, NULL, SW_SHOWNORMAL);
HRESULT SetMasterVolume(1.0, NULL);
return();
}
好的,我正在尝试编写这个程序,打开 YouTube 歌曲,同时调高音量。我不明白我得到的错误。
ERROR : C2440 ´initializing´: cannot convert from ´initializer list´ to ´HRESULT´
因此我的问题是:如何初始化 HRESULT
以便 SetMasterVolume
工作?或者,如何设置SetMasterVolume
?如果可能的话,请解释为什么我不能只写
SetMasterVolume(1.0,NULL);
当我包含 audioclient.h
你需要给它起个名字并赋值给它。
HRESULT hResult = SetMasterVolume(1.0, NULL);
ISimpleAudioVolume::SetMasterVolume
是一个 COM 方法,它不是常规的 WinAPI。当你只是输入函数时,你会得到一个编译错误。在其前面添加 HRESULT
会导致不同的 C++ 错误。
改用此代码,SetMasterVolumeLevelScalar
基于以下代码:
Change Master Volume in Visual C++
#include <Windows.h>
#include <Mmdeviceapi.h>
#include <Endpointvolume.h>
BOOL ChangeVolume(float nVolume)
{
HRESULT hr = NULL;
IMMDeviceEnumerator *deviceEnumerator = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
if(FAILED(hr))
return FALSE;
IMMDevice *defaultDevice = NULL;
hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
deviceEnumerator->Release();
if(FAILED(hr))
return FALSE;
IAudioEndpointVolume *endpointVolume = NULL;
hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume),
CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
defaultDevice->Release();
if(FAILED(hr))
return FALSE;
hr = endpointVolume->SetMasterVolumeLevelScalar(nVolume, NULL);
endpointVolume->Release();
return SUCCEEDED(hr);
}
int main()
{
CoInitialize(NULL);
ChangeVolume(0.5);
CoUninitialize();
return 0;
}
#include <iostream>
#include <windows.h>
#include <Audioclient.h>
int main(){
ShellExecute(NULL, "open", "https://www.youtube.com/watch?v=zf2VYAtqRe0", NULL, NULL, SW_SHOWNORMAL);
HRESULT SetMasterVolume(1.0, NULL);
return();
}
好的,我正在尝试编写这个程序,打开 YouTube 歌曲,同时调高音量。我不明白我得到的错误。
ERROR : C2440 ´initializing´: cannot convert from ´initializer list´ to ´HRESULT´
因此我的问题是:如何初始化 HRESULT
以便 SetMasterVolume
工作?或者,如何设置SetMasterVolume
?如果可能的话,请解释为什么我不能只写
SetMasterVolume(1.0,NULL);
当我包含 audioclient.h
你需要给它起个名字并赋值给它。
HRESULT hResult = SetMasterVolume(1.0, NULL);
ISimpleAudioVolume::SetMasterVolume
是一个 COM 方法,它不是常规的 WinAPI。当你只是输入函数时,你会得到一个编译错误。在其前面添加 HRESULT
会导致不同的 C++ 错误。
改用此代码,SetMasterVolumeLevelScalar
基于以下代码:
Change Master Volume in Visual C++
#include <Windows.h>
#include <Mmdeviceapi.h>
#include <Endpointvolume.h>
BOOL ChangeVolume(float nVolume)
{
HRESULT hr = NULL;
IMMDeviceEnumerator *deviceEnumerator = NULL;
hr = CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER,
__uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator);
if(FAILED(hr))
return FALSE;
IMMDevice *defaultDevice = NULL;
hr = deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice);
deviceEnumerator->Release();
if(FAILED(hr))
return FALSE;
IAudioEndpointVolume *endpointVolume = NULL;
hr = defaultDevice->Activate(__uuidof(IAudioEndpointVolume),
CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume);
defaultDevice->Release();
if(FAILED(hr))
return FALSE;
hr = endpointVolume->SetMasterVolumeLevelScalar(nVolume, NULL);
endpointVolume->Release();
return SUCCEEDED(hr);
}
int main()
{
CoInitialize(NULL);
ChangeVolume(0.5);
CoUninitialize();
return 0;
}