Esempio n. 1
0
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case WM_CREATE:
                try
                {
                    DEV_BROADCAST_DEVICEINTERFACE devBroadcastDeviceInterface = new DEV_BROADCAST_DEVICEINTERFACE();
                    IntPtr devBroadcastDeviceInterfaceBuffer;
                    IntPtr deviceNotificationHandle = IntPtr.Zero;
                    Int32  size = 0;

                    // frmMy is the form that will receive device-change messages.


                    size = Marshal.SizeOf(devBroadcastDeviceInterface);
                    devBroadcastDeviceInterface.dbcc_size       = size;
                    devBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
                    devBroadcastDeviceInterface.dbcc_reserved   = 0;
                    devBroadcastDeviceInterface.dbcc_classguid  = GUID_DEVINTERFACE_USB_DEVICE.ToByteArray();
                    devBroadcastDeviceInterfaceBuffer           = Marshal.AllocHGlobal(size);
                    Marshal.StructureToPtr(devBroadcastDeviceInterface, devBroadcastDeviceInterfaceBuffer, true);


                    deviceNotificationHandle = NativeMethods.RegisterDeviceNotification(this.Handle,
                                                                                        devBroadcastDeviceInterfaceBuffer, DEVICE_NOTIFY_WINDOW_HANDLE);
                }
                catch
                {
                }

                break;

            case WM_DEVICECHANGE:
                // The WParam value identifies what is occurring.
                WM_DEVICECHANGE_enum n = (WM_DEVICECHANGE_enum)m.WParam;
                var l = m.LParam;
                if (n == WM_DEVICECHANGE_enum.DBT_DEVICEREMOVEPENDING)
                {
                    Console.WriteLine("DBT_DEVICEREMOVEPENDING");
                }
                if (n == WM_DEVICECHANGE_enum.DBT_DEVNODES_CHANGED)
                {
                    Console.WriteLine("DBT_DEVNODES_CHANGED");
                }
                if (n == WM_DEVICECHANGE_enum.DBT_DEVICEARRIVAL ||
                    n == WM_DEVICECHANGE_enum.DBT_DEVICEREMOVECOMPLETE)
                {
                    Console.WriteLine(((WM_DEVICECHANGE_enum)n).ToString());

                    DEV_BROADCAST_HDR hdr = new DEV_BROADCAST_HDR();
                    Marshal.PtrToStructure(m.LParam, hdr);

                    try
                    {
                        switch (hdr.dbch_devicetype)
                        {
                        case DBT_DEVTYP_DEVICEINTERFACE:
                            DEV_BROADCAST_DEVICEINTERFACE inter = new DEV_BROADCAST_DEVICEINTERFACE();
                            Marshal.PtrToStructure(m.LParam, inter);
                            log.InfoFormat("Interface {0}",
                                           ASCIIEncoding.Unicode.GetString(inter.dbcc_name, 0, inter.dbcc_size - (4 * 3)));
                            break;

                        case DBT_DEVTYP_PORT:
                            DEV_BROADCAST_PORT prt = new DEV_BROADCAST_PORT();
                            Marshal.PtrToStructure(m.LParam, prt);
                            log.InfoFormat("port {0}",
                                           ASCIIEncoding.Unicode.GetString(prt.dbcp_name, 0, prt.dbcp_size - (4 * 3)));

                            this.BeginInvoke(new Action(() =>
                            {
                                textBox1.AppendText("port " +
                                                    ASCIIEncoding.Unicode.GetString(prt.dbcp_name, 0,
                                                                                    prt.dbcp_size - (4 * 3)).Trim().TrimEnd('\0') + "\r\n");
                            }));

                            new Thread(FWUpload).Start(new Tuple <int, string>(index++,
                                                                               ASCIIEncoding.Unicode.GetString(prt.dbcp_name, 0, prt.dbcp_size - (4 * 3))
                                                                               .Trim().TrimEnd('\0')));

                            break;
                        }
                    }
                    catch
                    {
                    }

                    //string port = Marshal.PtrToStringAuto((IntPtr)((long)m.LParam + 12));
                    //Console.WriteLine("Added port {0}",port);
                }
                log.InfoFormat("Device Change {0} {1} {2}", m.Msg, (WM_DEVICECHANGE_enum)m.WParam, m.LParam);

                if (DeviceChanged != null)
                {
                    try
                    {
                        DeviceChanged((WM_DEVICECHANGE_enum)m.WParam);
                    }
                    catch
                    {
                    }
                }



                break;

            default:
                //Console.WriteLine(m.ToString());
                break;
            }
            base.WndProc(ref m);
        }
        protected override void WndProc(ref Message m)
        {
            switch (m.Msg)
            {
            case WM_CREATE:
                try
                {
                    DEV_BROADCAST_DEVICEINTERFACE devBroadcastDeviceInterface = new DEV_BROADCAST_DEVICEINTERFACE();
                    IntPtr devBroadcastDeviceInterfaceBuffer;
                    IntPtr deviceNotificationHandle = IntPtr.Zero;
                    Int32  size = 0;

                    // frmMy is the form that will receive device-change messages.


                    size = Marshal.SizeOf(devBroadcastDeviceInterface);
                    devBroadcastDeviceInterface.dbcc_size       = size;
                    devBroadcastDeviceInterface.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE;
                    devBroadcastDeviceInterface.dbcc_reserved   = 0;
                    devBroadcastDeviceInterface.dbcc_classguid  = GUID_DEVINTERFACE_USB_DEVICE.ToByteArray();
                    devBroadcastDeviceInterfaceBuffer           = Marshal.AllocHGlobal(size);
                    Marshal.StructureToPtr(devBroadcastDeviceInterface, devBroadcastDeviceInterfaceBuffer, true);


                    deviceNotificationHandle = NativeMethods.RegisterDeviceNotification(this.Handle,
                                                                                        devBroadcastDeviceInterfaceBuffer, DEVICE_NOTIFY_WINDOW_HANDLE);
                }
                catch
                {
                }

                break;

            case WM_DEVICECHANGE:
                // The WParam value identifies what is occurring.
                WM_DEVICECHANGE_enum n = (WM_DEVICECHANGE_enum)m.WParam;
                var l = m.LParam;
                if (n == WM_DEVICECHANGE_enum.DBT_DEVICEREMOVEPENDING)
                {
                    Console.WriteLine("DBT_DEVICEREMOVEPENDING");
                }
                if (n == WM_DEVICECHANGE_enum.DBT_DEVNODES_CHANGED)
                {
                    Console.WriteLine("DBT_DEVNODES_CHANGED");

                    // DoScan();
                }
                if (n == WM_DEVICECHANGE_enum.DBT_DEVICEARRIVAL)
                {
                    Console.WriteLine(((WM_DEVICECHANGE_enum)n).ToString());

                    DEV_BROADCAST_HDR hdr = new DEV_BROADCAST_HDR();
                    Marshal.PtrToStructure(m.LParam, hdr);

                    try
                    {
                        switch (hdr.dbch_devicetype)
                        {
                        case DBT_DEVTYP_DEVICEINTERFACE:
                            DEV_BROADCAST_DEVICEINTERFACE inter = new DEV_BROADCAST_DEVICEINTERFACE();
                            Marshal.PtrToStructure(m.LParam, inter);
                            var devname = GetDeviceName(inter);
                            Console.WriteLine("Interface {0} {1}", inter.dbcc_name, devname);
                            break;

                        case DBT_DEVTYP_PORT:
                            DEV_BROADCAST_PORT prt = new DEV_BROADCAST_PORT();
                            Marshal.PtrToStructure(m.LParam, prt);
                            Console.WriteLine("port {0}", prt.dbcp_name);

                            Uploader up = null;
                            try
                            {
                                up = new px4uploader.Uploader(new SerialPort(prt.dbcp_name, 115200));

                                up.identify();

                                up.close();
                            }
                            catch
                            {
                            }
                            break;
                        }
                    }
                    catch
                    {
                    }

                    //string port = Marshal.PtrToStringAuto((IntPtr)((long)m.LParam + 12));
                    //Console.WriteLine("Added port {0}",port);
                }
                Console.WriteLine("Device Change {0} {1} {2}", m.Msg, (WM_DEVICECHANGE_enum)m.WParam, m.LParam);

                if (DeviceChanged != null)
                {
                    try
                    {
                        DeviceChanged((WM_DEVICECHANGE_enum)m.WParam);
                    }
                    catch
                    {
                    }
                }



                break;

            default:
                //Console.WriteLine(m.ToString());
                break;
            }
            base.WndProc(ref m);
        }