void LoadHardware <T>()
        {
            Settings set = Settings.Get <Settings>();

            if (set != null)
            {
                try
                {
                    string proxystr = set.Read(Settings.LAST_USED, Settings.PROXY <T>(), string.Empty);
                    if (String.IsNullOrEmpty(proxystr))
                    {
                        return;
                    }
                    Type proxyType = Reflector.GetType(proxystr);
                    if (proxyType == null)
                    {
                        return;
                    }
                    if (Settings.Get(proxyType) != null)
                    {
                        return;
                    }
                    /// change and use the provider instead of the proxy, to avoir creation of proxy just to create the last used
                    IHardwareProxy proxy      = Reflector.CreateInstance <IHardwareProxy>(proxyType);
                    string         hardwareId = set.Read(Settings.LAST_USED, Settings.HARDWAREID <T>(), string.Empty);
                    proxy = proxy.LoadFromHardwareId(hardwareId);
                    Settings.RegisterInstance(proxy);
                }
                catch
                {
                }
            }
        }
        void SaveHardware <T>()
        {
            Settings set = Settings.Get <Settings>();

            if (set != null)
            {
                IHardwareProxy proxy = Settings.Get <T>() as IHardwareProxy;
                if (proxy != null)
                {
                    set.Write(Settings.LAST_USED, Settings.PROXY <T>(), proxy.GetType().AssemblyQualifiedName);
                    set.Write(Settings.LAST_USED, Settings.HARDWAREID <T>(), proxy.HardwareId);
                }
                else
                {
                    set.Write(Settings.LAST_USED, Settings.PROXY <T>(), string.Empty);
                    set.Write(Settings.LAST_USED, Settings.HARDWAREID <T>(), string.Empty);
                }
            }
        }
        private void ShowHideHardwareView(StatusImageButton button)
        {
            IHardwareProxy proxy = GetAssociatedProxy(button);

            if (proxy != null)
            {
                Control viewer = proxy.GetViewer();
                if (viewer == null || (SettingsPanel.Controls.Count > 0 && SettingsPanel.Controls[0].GetType() == viewer.GetType()))
                {
                    ClearSettingsPanel();
                    if (viewer is IDisposable)
                    {
                        ((IDisposable)viewer).Dispose();
                    }
                }
                else
                {
                    ShowSettingsPanel(viewer);
                }
            }
        }