2011-08-28 76 views
0

我一直在嘗試使用Windows音頻API的程序工作。 最終結果將是一個檢查其他音頻過程中的音量變化的程序。 我已經看過微軟網站上的一些例子,並且對我應該做的事情有所欠缺。 但是,當我試圖實現這一點,我得到一些錯誤。我首先嚐試獲取所有音頻進程運行的列表,實際上只是一分鐘計數。 我使用的代碼是基於Windows網站上的代碼,但是當我嘗試構建它時遇到了錯誤。這兩個主要的有:使用Windows核心音頻API的問題

  1. 「IAudioSessionManager2」:沒有GUID已與此對象
  2. 使用未定義類型的關聯「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); 
} 
+0

您使用的是哪個版本的Windows SDK?如果您不知道,請提及Visual Studio版本。 –

+0

我不是100%確定我使用的是哪個版本的SDK,但我使用的是Visual Studio 2008版本3.5 SP1 – Bren85

回答

0

你有6.0版本。您需要下載並安裝Windows SDK version 7.1。 IAudioSessionManager2僅在Windows 7上可用。

+0

感謝Hans,對它進行了排序。 我知道這是愚蠢的,我做錯了。 – Bren85