private void FormMIDI2PC_Load(object sender, EventArgs e) { callbackDelegate = new Win32Midi.MidiInProc(callback); callbackPtr = (IntPtr)Marshal.GetFunctionPointerForDelegate(callbackDelegate); uint uDevicesSum = Win32Midi.MidiInGetNumDevs(); lblMes.Text = "Devices-sum:" + uDevicesSum.ToString(); Win32Midi.MidiInCaps getMidiInCap = new Win32Midi.MidiInCaps(); for (uint i = 0; i < uDevicesSum; i++) { Win32Midi.MidiInGetDevCaps(i, ref getMidiInCap, Win32Midi.MaxPNameLen); int Version1 = (int)getMidiInCap.vDriverVersion >> 8 & 0xff; int Version2 = (int)getMidiInCap.vDriverVersion & 0xff; lblInCaps.Text = i.ToString() + ": Mid:0x" + getMidiInCap.wMid.ToString("X4") + " Pid:0x" + getMidiInCap.wPid.ToString("X4") + " DriverVersion: V" + Version1.ToString() + "." + Version2.ToString() + " Pname:" + getMidiInCap.szPname.ToString() + " Support:0x" + getMidiInCap.dwSupport.ToString("X2"); if (i < uDevicesSum - 1) { lblInCaps.Text += "\n"; } } new Thread(new ThreadStart(detectDevice)).Start(); }
private void detectDevice() { mutexDetectDevice.WaitOne(); var devNum = Win32Midi.MidiInGetNumDevs(); if (devNum != 0) { var res = Win32Midi.MidiInOpen(ref midiIn, 0, callbackPtr, (IntPtr)0, Win32Midi.CallbackFunction); if (res == Win32Midi.MMSysErrNoError) { res = Win32Midi.MidiInStart(midiIn); } if (res != Win32Midi.MMSysErrNoError) { var sb = new StringBuilder(); sb.Capacity = 1024; Win32Midi.MidiInGetErrorText(res, sb, (uint)sb.Capacity); Invoke(new addLogDelegate(addLog), sb.ToString()); } } mutexDetectDevice.ReleaseMutex(); }
private void FormMIDI2PC_FormClosed(object sender, FormClosedEventArgs e) { Win32Midi.MidiInStop(midiIn); Win32Midi.midiInClose(ref midiIn); }