/// <summary>
        ///
        /// </summary>
        public virtual int GetInputDeviceHandle()
        {
            //
            if (handle >= 0)
            {
                return(handle);
            }
            // Natives
            int ret = XDevicePlugin.GetInputDeviceHandle(name);

            if (ret >= 0)
            {
                XDevicePlugin.RemoveInputDeviceAt(ret);
            }                                                                      // Remove the same name device...
            //
            ret = XDevicePlugin.AddExternalControllerDevice(name, ExternalControllerDevice.GetInputState, ExternalControllerDevice.SendMessage);
            XDevicePlugin.SetInt(ret, XDevicePlugin.kField_ConnectionStateInt, (int)DeviceConnectionState.Connected);
            // Managed
            ExternalControllerDevice.RemoveInputDevice(ExternalControllerDevice.GetInputDevice(name));                    // Remove the same name device...
            ExternalControllerDevice.SetInputDevice(handle = ret, this);
            return(ret);
        }