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); }
/// <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); }