回答
沒有公共API允許您更改默認音頻設備,即被認爲是在用戶控制下的功能。 Windows中一直如此。儘管如此,如果您在網上搜索,有很多人已經對Windows Vista中使用的API進行了反向設計,但我不打算指向他們(相反設計的API是內部不受支持的API,可能會在沒有得到Microsoft通知的情況下更改)。您可以自行使用這些解決方案。
http://sdae.codeplex.com/ - 我用這個,它工作。 – 2014-01-24 14:24:25
我將上述註釋中的鏈接代碼轉換爲C#並添加了一些內容,您也可以在此處找到它:https://github.com/zivsha/SoundControl – ZivS 2016-10-19 06:58:44
System Tray Audio Device Switcher使用"Software\Microsoft\Multimedia\Sound Mapper", "Playback"
來設置通過枚舉設備獲得的聲音設備的索引。 mciSendCommand從「WINMM.DLL」也被
在這個source code,你會發現用來實現該註冊表項。
如果這不起作用,您可以試一試Process Monitor,並在更改默認設備時監視Windows的所有註冊表活動。在我的Vista安裝控制面板"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\"
旋轉因子爲Vista的看到 http://www.vistaaudiochanger.com/
我真的不知道,如果有人仍然需要這一點,但這裏是我的解決方案。實際上,它是用於捕捉設備的,但它可以很容易地更改爲渲染設備。
它將設備密鑰中的3個註冊表值設置爲當前時間。魔術,但這是它的工作原理。 注:僅在Win7 x64上測試過
void SetDefaultRecordDevice(tstring strDeviceName){
const int BUFF_LEN = 260;
//HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{79434968-09f6-4dff-8086-c5e618b21473}\Role:0:
//"DE 07 08 00 06 00 10 00 15 00 38 00 1E 00 48 03"
HKEY hkCaptureDevices;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\MMDevices\\Audio\\Capture") , 0, KEY_ENUMERATE_SUB_KEYS | KEY_WOW64_64KEY, &hkCaptureDevices);
TCHAR lpwstrDeviceGuidKey[BUFF_LEN];
DWORD dwDeviceGuidKeySize = BUFF_LEN;
for(int i=0;RegEnumKeyEx(hkCaptureDevices, i, lpwstrDeviceGuidKey, &dwDeviceGuidKeySize, 0, 0, 0, 0) != ERROR_NO_MORE_ITEMS; ++i){
dwDeviceGuidKeySize = BUFF_LEN;
HKEY hkProps;
RegOpenKeyEx(hkCaptureDevices, (tstring(lpwstrDeviceGuidKey) + _T("\\Properties")).c_str() , 0, KEY_READ | KEY_WOW64_64KEY, &hkProps);
TCHAR data[BUFF_LEN];
DWORD dwDataSize = BUFF_LEN;
if(RegQueryValueEx(hkProps, _T("{a45c254e-df1c-4efd-8020-67d146a850e0},2"), 0, 0, (LPBYTE)data, &dwDataSize) != ERROR_SUCCESS){
continue;
} else {
tstring strCurrentDeviceName(data);
// TODO név általánosítás
if(strDeviceName == strCurrentDeviceName){
HKEY hkGuid;
RegOpenKeyEx(hkCaptureDevices, lpwstrDeviceGuidKey , 0, KEY_READ | KEY_SET_VALUE | KEY_QUERY_VALUE | KEY_WOW64_64KEY | KEY_NOTIFY , &hkGuid);
time_t CurrentTime;
time(&CurrentTime);
time_t now = time(0);
struct tm tstruct;
gmtime_s(&tstruct, &now);
// Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
// for more information about date/time format
char CustomRegistryDateValue[16];
WORD year = tstruct.tm_year + 1900;
WORD month = tstruct.tm_mon+1;
WORD dayOfTheWeek = tstruct.tm_wday;
WORD day = tstruct.tm_mday;
WORD hour = tstruct.tm_hour;
WORD minute = tstruct.tm_min;
WORD second = tstruct.tm_sec;
WORD millisec = 0x0; // hasrautés
int k = 0;
*((WORD*)CustomRegistryDateValue + k++) = year;
*((WORD*)CustomRegistryDateValue + k++) = month;
*((WORD*)CustomRegistryDateValue + k++) = dayOfTheWeek;
*((WORD*)CustomRegistryDateValue + k++) = day;
*((WORD*)CustomRegistryDateValue + k++) = hour;
*((WORD*)CustomRegistryDateValue + k++) = minute;
*((WORD*)CustomRegistryDateValue + k++) = second;
*((WORD*)CustomRegistryDateValue + k++) = millisec;
RegSetValueExA(hkGuid, ("Role:0"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
RegSetValueExA(hkGuid, ("Role:1"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
RegSetValueExA(hkGuid, ("Role:2"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
RegFlushKey(hkGuid);
RegCloseKey(hkGuid);
}
}
RegCloseKey(hkProps);
}
RegCloseKey(hkCaptureDevices);
}
太棒了!即使在Windows 10中工作 – 2016-07-06 00:03:31
實際上這並不起作用,至少在Windows 7/64中不起作用。聲音/錄音對話框確實顯示了默認錄音設備的變化(如果至少重新載入),但(重新打開)WaveIn功能仍然從舊設備獲取數據。所以它看起來是一個整體變化,內部的東西沒有更新。猜猜它需要更多的魔法。 – 2016-08-16 12:34:24
- 1. C#如何以編程方式更改播放設備
- 2. 如何以編程方式播放默認電話鈴聲?
- 3. 如何以編程方式更改默認音頻輸入設備
- 4. 如何讓iOS設備以編程方式播放音樂?
- 5. 如何以編程方式更改非默認聲音設備的音量級別?
- 6. 如何播放默認的TICK聲音?
- 7. 以編程方式設置默認鬧鐘聲音Android
- 8. 如何以編程方式從鈴聲設置默認鈴聲
- 9. 如何以編程方式更改相機默認設置
- 10. 如何在默認音頻設備上設置權限,以便可以通過編程方式進行更改?
- 11. 如何從默認音頻設備錄製和播放音頻
- 12. 如何使用URI以編程方式播放通知聲音而不將其設置爲默認值?
- 13. 如何以編程方式在iOS設備中以不同音高播放聲音文件
- 14. 如何通知我的應用程序默認的聲音播放設備已更改?
- 15. 更改播放設備編程XP
- 16. 將音頻播放到.net中的非默認播放設備
- 17. 如何以編程方式播放錄製聲音以及如何播放錄製的音頻?
- 18. 贏手機7更改默認撥號器和播放聲音
- 19. 設備的默認音量/聲音
- 20. 如何以編程方式更改默認應用程序?
- 21. 以編程方式爲應用程序設置播放設備
- 22. 如何在Android上以編程方式更改聲音
- 23. 如何選擇聲音設備播放聲音?
- 24. 以編程方式防止Android上的默認按鈕聲音
- 25. 播放默認聲音後定時器
- 26. 在iOS中以編程方式製作按鈕播放聲音
- 27. 播放聲音編程
- 28. 更改播放默認包
- 29. 以編程方式播放所有版本中的黑莓默認鈴聲
- 30. WooCommerce:以編程方式更改默認的運輸方式
您是指默認的聲音輸出?即使是非MCI播放? – 2010-02-01 15:32:17