我一直在嘗試使用Windows音頻API的程序工作。 最終結果將是一個檢查其他音頻過程中的音量變化的程序。 我已經看過微軟網站上的一些例子,並且對我應該做的事情有所欠缺。 但是,當我試圖實現這一點,我得到一些錯誤。我首先嚐試獲取所有音頻進程運行的列表,實際上只是一分鐘計數。 我使用的代碼是基於Windows網站上的代碼,但是當我嘗試構建它時遇到了錯誤。這兩個主要的有:使用Windows核心音頻API的問題
- 「IAudioSessionManager2」:沒有GUID已與此對象
- 使用未定義類型的關聯「IAudioSessionManager2」
也有一個類似的第二屆一個但與IAudioSessionEnumerator有關。我對C++編程相當陌生,更習慣於Java,所以我認爲這只是一些愚蠢的小錯誤來處理頭文件或其他東西,我已經包含了.h代碼和.cpp代碼下面。 如果有人能夠幫助我,將不勝感激。
GetProcess.h
#ifndef GETPROCESS_H
#define GETPROCESS_H
#define SAFE_RELEASE(p) { if ((p)) { (p)->Release(); (p) = 0; } }
#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>
using namespace std;
struct IAudioSessionManager2;
struct IAudioSessionEnumerator;
struct IAudioSessionControl;
struct IMMDevice;
struct IMMDeviceEnumerator;
ref class GetProcess
{
public:
GetProcess();
};
#endif
GetProcess.cpp
#include "StdAfx.h"
#include "GetProcess.h"
#include<Audiopolicy.h>
#include<Mmdeviceapi.h>
#include <stdio.h>
#include <iostream>
#include <windows.h>
GetProcess::GetProcess()
{
IMMDeviceEnumerator* deviceEnumerator = NULL;
IMMDevice* device = NULL;
IAudioSessionManager2* sessionManager = NULL;
IAudioSessionEnumerator* sessionEnumerator = NULL;
IAudioSessionControl* session = NULL;
int numberOfProcesses = 0;
int numberOfActiveProcesses = 0;
AudioSessionState state;
//create device enumerator
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, __uuidof(IMMDeviceEnumerator), (void**)&deviceEnumerator);
// get default device
deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &device);
// activate session manager
device->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void**)&sessionManager);
//// make enum
sessionManager->GetSessionEnumerator(&sessionEnumerator);
sessionEnumerator ->GetCount(&numberOfProcesses);
for (int i = 0; i < numberOfProcesses; i++)
{
sessionEnumerator->GetSession(i, &session);
session->GetState(&state);
if (state == 1)
{
numberOfActiveProcesses++;
}
SAFE_RELEASE(session);
}
//CLEANUP
SAFE_RELEASE(deviceEnumerator);
SAFE_RELEASE(device);
SAFE_RELEASE(sessionEnumerator);
SAFE_RELEASE(sessionManager);
}
您使用的是哪個版本的Windows SDK?如果您不知道,請提及Visual Studio版本。 –
我不是100%確定我使用的是哪個版本的SDK,但我使用的是Visual Studio 2008版本3.5 SP1 – Bren85