#include <iostream>
#include <mmdeviceapi.h>
#include <audiopolicy.h>
#include <comdef.h>
#include <psapi.h>
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "oleaut32.lib")
template <class T>
void SafeRelease(T** ppT) {
if(*ppT) {
(*ppT)->Release();
*ppT = NULL;
}
}
std::wstring GetProcessName(DWORD processID) {
char processName[MAX_PATH] = "<unknown>";
HANDLE hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, processID);
if(hProcess != NULL) {
HMODULE hMod = NULL;
DWORD cbNeeded = -1;
if(EnumProcessModules(hProcess, &hMod, sizeof(hMod), &cbNeeded)) {
GetModuleBaseNameA(hProcess, hMod, processName, sizeof(processName) / sizeof(char));
}
}
CloseHandle(hProcess);
std::string temp(processName);
return std::wstring(temp.begin(), temp.end());
}
int main() {
CoInitialize(NULL);
IMMDeviceEnumerator* pEnumerator = NULL;
CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_ALL, IID_PPV_ARGS(&pEnumerator));
IMMDevice* pDevice = NULL;
pEnumerator->GetDefaultAudioEndpoint(eRender, eMultimedia, &pDevice);
IAudioSessionManager2* pSessionManager = NULL;
pDevice->Activate(__uuidof(IAudioSessionManager2), CLSCTX_ALL, NULL, (void**) &pSessionManager);
IAudioSessionEnumerator* pSessionList = NULL;
pSessionManager->GetSessionEnumerator(&pSessionList);
int sessionCount = -1;
pSessionList->GetCount(&sessionCount);
for(int i = 0; i < sessionCount; i++) {
IAudioSessionControl* pSessionControl = NULL;
pSessionList->GetSession(i, &pSessionControl);
IAudioSessionControl2* pSessionControl2 = NULL;
HRESULT hr = pSessionControl->QueryInterface(__uuidof(IAudioSessionControl2), (void**) &pSessionControl2);
if(SUCCEEDED(hr)) {
DWORD processId = -1;
pSessionControl2->GetProcessId(&processId);
std::wstring processName = GetProcessName(processId);
// 여기서 할 일 하면 됨
std::wcout << L"PID: " << processId << ", Name: " << processName << std::endl;
pSessionControl2->Release();
}
pSessionControl->Release();
}
SafeRelease(&pSessionList);
SafeRelease(&pSessionManager);
SafeRelease(&pDevice);
SafeRelease(&pEnumerator);
CoUninitialize();
return 0;
}
--------
이거 그대로 가져다 쓰지 마셈. 그대로 쓴다면 발생하는 문제는 감수할 것
일단 오디오 쓰는 프로세스는 다 잡는거 같아서 올림