Как инициализировать HRESULT для 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 и одновременно увеличивает громкость. Я не понимаю ошибку, которую я получаю.

ОШИБКА: C2440 "Инициализация": невозможно преобразовать из "списка инициализаторов" в "HRESULT"

Итак, поэтому мой вопрос: как мне инициализировать HRESULT так SetMasterVolume работает? Или как настроить SetMasterVolume? И, пожалуйста, если возможно, объясните, почему я не могу просто написать

SetMasterVolume(1.0,NULL);

Когда я включил audioclient.h

2 ответа

Решение

ISimpleAudioVolume::SetMasterVolume это метод COM, это не обычный WinAPI. Вы получаете ошибку компиляции, когда просто вводите функцию. Добавление HRESULT перед ним возникнет другая ошибка C++.

Используйте этот код вместо SetMasterVolumeLevelScalar

На основе кода из:
Изменить основной объем в 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;
}

Вам нужно дать ему имя и присвоить ему.

HRESULT hResult = SetMasterVolume(1.0, NULL);
Другие вопросы по тегам