/// <summary>
        /// Tries to get Device ID from Hardware String
        /// </summary>
        /// <param name="isMouse">Whether the device is a mouse or a keyboard</param>
        /// <param name="handle">The Hardware String (handle) of the device</param>
        /// <param name="instance">The instance of the VID/PID (Optional)</param>
        /// <returns></returns>
        public int GetDeviceIdFromHandle(bool isMouse, string handle, int instance = 1)
        {
            var start = isMouse ? 11 : 0;
            var max   = isMouse ? 21 : 11;

            for (var i = start; i < max; i++)
            {
                var hardwareStr = ManagedWrapper.GetHardwareStr(_deviceContext, i, 1000);
                if (hardwareStr != handle)
                {
                    continue;
                }

                if (instance == 1)
                {
                    return(i);
                }
                instance--;
            }

            //ToDo: Should throw here?
            return(0);
        }
        /// <summary>
        /// Tries to get Device ID from VID/PID
        /// </summary>
        /// <param name="isMouse">Whether the device is a mouse or a keyboard</param>
        /// <param name="vid">The VID of the device</param>
        /// <param name="pid">The PID of the device</param>
        /// <param name="instance">The instance of the VID/PID (Optional)</param>
        /// <returns></returns>
        public int GetDeviceId(bool isMouse, int vid, int pid, int instance = 1)
        {
            var start = isMouse ? 11 : 0;
            var max   = isMouse ? 21 : 11;

            for (var i = start; i < max; i++)
            {
                var hardwareStr = ManagedWrapper.GetHardwareStr(_deviceContext, i, 1000);
                int foundVid = 0, foundPid = 0;
                GetVidPid(hardwareStr, ref foundVid, ref foundPid);
                if (foundVid != vid || foundPid != pid)
                {
                    continue;
                }
                if (instance == 1)
                {
                    return(i);
                }
                instance--;
            }

            //ToDo: Should throw here?
            return(0);
        }