in ScpPair/ScpForm.cs [78:133]
protected override void WndProc(ref Message m)
{
try
{
if (m.Msg == ScpDevice.WM_DEVICECHANGE)
{
string Path;
ScpDevice.DEV_BROADCAST_HDR hdr;
var Type = m.WParam.ToInt32();
hdr =
(ScpDevice.DEV_BROADCAST_HDR)
Marshal.PtrToStructure(m.LParam, typeof (ScpDevice.DEV_BROADCAST_HDR));
if (hdr.dbch_devicetype == ScpDevice.DBT_DEVTYP_DEVICEINTERFACE)
{
ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M deviceInterface;
deviceInterface =
(ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M)
Marshal.PtrToStructure(m.LParam, typeof (ScpDevice.DEV_BROADCAST_DEVICEINTERFACE_M));
Path = new string(deviceInterface.dbcc_name);
Path = Path.Substring(0, Path.IndexOf('\0')).ToUpper();
switch (Type)
{
case ScpDevice.DBT_DEVICEARRIVAL:
if (usbDevice.State != DsState.Connected)
{
usbDevice.Close();
usbDevice = new UsbDs3();
if (usbDevice.Open(Path)) usbDevice.Start();
}
break;
case ScpDevice.DBT_DEVICEREMOVECOMPLETE:
if (Path == usbDevice.Path && usbDevice.State == DsState.Connected)
{
usbDevice.Close();
}
break;
}
}
}
}
catch
{
}
base.WndProc(ref m);
}