【发布时间】:2021-09-02 20:11:13
【问题描述】:
我正在构建一个混音器应用,需要为每个音频会话获取用户友好的名称。
我试过了:
-
IAudioSessionControl::GetDisplayName()方法,但它为每个会话返回空字符串。 -
调用
QueryFullProcessImageName()和GetModuleFileNameEx(),但它们只输出C:\Users\,因为路径中有西里尔字母。但即使他们确实输出了完整路径,我认为它会以...\brave.exe之类的结尾(如果我错了,请纠正我),这不是一个用户友好的名称,如 Windows 内置混音器中的Brave Browser. -
我还尝试像这样获取所有进程名称和 PID,然后将它们与会话进程 ID 匹配,这成功地给了我像
chrome.exe或steam.exe这样的名称,但它们仍然不是我想要的:std::vector<std::pair<DWORD, wchar_t*>> processes; HANDLE handle = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); PROCESSENTRY32 entry; entry.dwSize = sizeof(PROCESSENTRY32); Process32First(handle, &entry); do { processes.emplace_back(entry.th32ProcessID, entry.szExeFile); } while (Process32Next(handle, &entry)); CloseHandle(handle);
我想要的是检索内置混音器应用程序中的名称,即Steam、Chrome Browser、Zoom Meetings 等。
有没有办法做到这一点?还是微软在这里使用了某种黑魔法?
【问题讨论】:
-
好像你想获取进程主HWND(stackoverflow.com/questions/1888863/…)然后在上面使用
GetWindowText?