Микшер громкости приложения Windows

Я хотел бы перечислить приложения, отображаемые в микшере громкости Windows.

В этом примере "sons systeme", "Windows" и "spotify" введите здесь описание изображения Я пишу код и могу подсчитать и перечислить эти приложения. Проблема в том, что я не могу получить ни их имя, ни их путь к значку. Вот вывод:

Session Name:
Icon path Name:
Session Name:
Icon path Name:
Session Name:
Icon path Name:
Session Name: @%SystemRoot%\System32\AudioSrv.Dll,-202
Icon path Name: @%SystemRoot%\System32\AudioSrv.Dll,-203

Я не понимаю, почему я не могу получить такие данные.

Вот мой код:

 IMMDevice* pDevice = NULL;
IMMDeviceEnumerator* pEnumerator = NULL;
IAudioSessionControl* pSessionControl = NULL;
IAudioSessionControl2* pSessionControl2 = NULL;
IAudioSessionManager2* pSessionManager = NULL;

hr = CoInitialize(NULL);

// Create the device enumerator.
hr = CoCreateInstance(
            __uuidof(MMDeviceEnumerator),
            NULL, CLSCTX_ALL,
            __uuidof(IMMDeviceEnumerator),
            (void**)&pEnumerator);

// Get the default audio device.
hr = pEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &pDevice);
hr = pDevice->Activate(__uuidof(IAudioSessionManager2),
                             CLSCTX_ALL,
                             NULL, (void**)&pSessionManager);

hr = pSessionManager->GetAudioSessionControl(0, FALSE, &pSessionControl);

// Get the extended session control interface pointer.
hr = pSessionControl->QueryInterface(__uuidof(IAudioSessionControl2), (void**) &pSessionControl2);

// Check whether this is a system sound.
hr = pSessionControl2->IsSystemSoundsSession();

int cbSessionCount = 0;
LPWSTR pswSession = NULL;

IAudioSessionEnumerator* pSessionList = NULL;

hr = pSessionManager->GetSessionEnumerator(&pSessionList);
hr = pSessionList->GetCount(&cbSessionCount);
std::cout << cbSessionCount << std::endl;
for (int index = 0 ; index < cbSessionCount ; index++)
{
    hr = pSessionList->GetSession(index, &pSessionControl);
    hr = pSessionControl->GetDisplayName(&pswSession);
    std::wcout << "Session Name: " <<  pswSession << std::endl;
    hr = pSessionControl->GetIconPath(&pswSession);
    std::wcout << "Icon path Name: " <<  pswSession << std::endl;
}

person Erwan Douaille    schedule 22.01.2018    source источник


Ответы (1)


Вы можете получить имя, используя ProcessID

DWORD procID;
pSessionControl2->GetProcessId(&procID);

И затем с помощью ProcessID вы можете получить дескриптор программы и найти имя и значок.

person Zero    schedule 24.04.2018