Я бы хотел получить идентификатор аудиоустройства по умолчанию через WinAPI с C #.Я хочу сохранить этот идентификатор (и том в будущем) для его восстановления в будущем в WinServer2012 и Windows8.Я стараюсь избегать каких-либо обёрток или включений дополнительных dll.Как я гуглил, это возможно с помощью следующей функции WinAPI:
[DllImport("winmm.dll")]
static extern uint waveOutMessage(IntPtr deviceID, uint uMsg, ref uint dwParam1, ref uint dwParam2);
Я нашел пример для вызова следующих функций:
[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
}
Я ожидаю вывод идентификатора аудиоустройства по умолчанию.Но я получаю 0 (который я определил) для каждой переменной.У меня нет результатов с этой функцией на WinServer2012.Я что-то не так написал или это невозможно в моем случае?Спасибо.