Exemplo n.º 1
0
        public static bool SynchronizeToHidGuardian(params Guid[] instanceGuids)
        {
            var game = SettingsManager.CurrentGame;

            // Affected devices.
            UserDevice[] devices;
            lock (SettingsManager.UserDevices.SyncRoot)
            {
                devices = instanceGuids == null || instanceGuids.Length == 0
                                        ? SettingsManager.UserDevices.Items.ToArray()
                                        : SettingsManager.UserDevices.Items.Where(x => instanceGuids.Contains(x.InstanceGuid)).ToArray();
            }
            // Get all Ids.
            var idsToHide = new List <string>();
            var idsToShow = new List <string>();

            foreach (var ud in devices)
            {
                var hardwareId = (ud.HidHardwareIds ?? "")
                                 // Split lines into arraty and exclude empty ones.
                                 .Split(new char[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries)
                                 // Get all Hardware IDs with vendor code and product code.
                                 .Where(x => HidGuardianHelper.HardwareIdRegex.IsMatch(x)).ToList()
                                 // Put longest ID on top.
                                 .OrderByDescending(x => x)
                                 // Take most detail Hardware ID.
                                 .FirstOrDefault();
                // If hardware is not available then create from device id.
                if (string.IsNullOrEmpty(hardwareId) && !string.IsNullOrEmpty(ud.DevDeviceId))
                {
                    hardwareId = HidGuardianHelper.ConvertToHidVidPid(ud.DevDeviceId).FirstOrDefault();
                }
                if (string.IsNullOrEmpty(hardwareId))
                {
                    continue;
                }
                // If must hide and device is not keyboard or mouse.
                if (ud.IsHidden && !ud.IsKeyboard && !ud.IsMouse)
                {
                    idsToHide.Add(hardwareId);
                }
                else if (!ud.IsHidden)
                {
                    idsToShow.Add(hardwareId);
                }
            }
            var canModify = ViGEm.HidGuardianHelper.CanModifyParameters(true);

            if (canModify)
            {
                var idsToHide2 = idsToHide.Distinct().ToArray();
                var idsToShow2 = idsToShow.Distinct().ToArray();
                ViGEm.HidGuardianHelper.RemoveFromAffected(idsToShow2);
                ViGEm.HidGuardianHelper.InsertToAffected(idsToHide2);
            }
            return(canModify);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Must be executed before program close.
        /// </summary>
        /// <returns></returns>
        public static bool UnhideAllDevices()
        {
            var affected = ViGEm.HidGuardianHelper.GetAffected();

            // Clear list of hidden devices.
            ViGEm.HidGuardianHelper.ClearAffected();
            var devices = SettingsManager.UserDevices.ItemsToArraySyncronized();

            // Unhide all devices.
            for (int i = 0; i < devices.Length; i++)
            {
                devices[i].IsHidden = false;
            }
            HidGuardianHelper.ResetDevices(affected);
            return(true);
        }