Как получить идентификатор устройства воспроизведения по умолчанию через winapi на C#?
- Привет!
Я хотел бы получить идентификатор аудиоустройства по умолчанию через WinAPI с помощью C#. Я хочу сохранить этот идентификатор (а также том) для восстановления его в будущем в WinServer2012 и Windows8. Как я погуглил это возможно со следующей функцией WinAPI:
[DllImport("winmm.dll")] static extern uint waveOutMessage(IntPtr deviceID, uint uMsg, ref uint dwParam1, ref uint dwParam2);
Но у меня нет никаких результатов с этой функцией на WinServer2012. Я что-то неправильно закодировал или это невозможно в моем случае?
Спасибо.
Что я уже пробовал:
Я нашел пример для вызова следующих функций:
[DllImport("winmm.dll")] static extern uint waveOutMessage(IntPtr deviceID, uint uMsg, IntPtr dwParam1, IntPtr dwParam2);
или
[DllImport("winmm.dll")] static extern uint waveOutMessage(IntPtr deviceID, uint uMsg, ref uint dwParam1, ref uint dwParam2);
с помощью метода C# :
string GetAudioOutput() { uint originalDeviceId = 0; //4 uint newDeviceId = 0; //4 uint DRVM_MAPPER_PREFERRED_GET = 0x2015; uint DRVM_MAPPER_PREFERRED_SET = 0x2016; int deviceId = 0; //-1 IntPtr WAVE_MAPPER = new IntPtr(-1); uint ret = waveOutMessage(WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, GCHandle.Alloc(originalDeviceId, GCHandleType.Pinned).AddrOfPinnedObject() , GCHandle.Alloc(newDeviceId, GCHandleType.Pinned).AddrOfPinnedObject() ); //uint ret = waveOutMessage(WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, ref originalDeviceId, ref newDeviceId); return deviceId.ToString() + originalDeviceId.ToString() + newDeviceId.ToString() + ret.ToString(); //I get 0000 }