Pauliss Ответов: 0

Как получить идентификатор устройства воспроизведения по умолчанию через 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
        }

0 Ответов