我正在建立一個調音臺應用程式,需要為每個音頻會話獲得用戶友好的名稱。
我試過:
IAudioSessionControl::GetDisplayName()方法,但它為每個會話回傳空字串。呼叫
QueryFullProcessImageName()和GetModuleFileNameEx(),但它們只輸出C:Users,因為我在路徑中有西里爾字母。但即使它們真的輸出了完整的路徑,我想它也會以...rave.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,等等。
有什么方法可以實作這一點嗎?或者微軟在這里使用了某種黑色的魔法?
uj5u.com熱心網友回復:
呼叫
QueryFullProcessImageName()和GetModuleFileNameEx(),但它們只輸出C:Users,因為我在路徑中有西里爾字母。
那么你只是沒有正確顯示路徑。西里爾字母的存在并不是一個問題。
那么你只是沒有正確地顯示路徑。
我還試著獲取了所有的路徑。
我還試著像這樣獲得所有行程的名稱和PID,然后將它們與會話行程ID相匹配,這成功地給了我像
chrome.exe或steam.exe這樣的名稱,但它們仍然,再次,不完全是我想要的
這段代碼不能正常作業。你在你的std::vector中存盤了指向一個wchar_t[]緩沖區的指標,這個緩沖區在每個回圈迭代中被修改。你應該存盤std::wstring而不是wchar_t*,這樣每個路徑都被復制了。
我想要的是像在內置的混合器應用程式中檢索名稱,即
Steam,Chrome Browser,Zoom Meetings,等等。
一旦你有了EXE的路徑,你可以使用GetFileVersionInfo()和VerQueryValue()來檢索應用程式的人類可讀檔案描述。請參閱使用VerQueryValue檢索應用程式的檔案描述。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/320304.html
標籤:
上一篇:我如何用c 改變/設定DNS?
