public IDictionary <Wtypes.PROPERTYKEY, object> GetFromPropertyStore(IEnumerable <Wtypes.PROPERTYKEY> keys) { if (keys == null) { throw new NotSupportedException(AutoHelpers.FormatInvariant("Keys passed cannot be null")); } Shell32.IPersistFile persist = (Shell32.IPersistFile) new Shell32.ShellLink(); persist.Load(this.ShortcutPath, (uint)ObjBase.STGM.STGM_READ); Shell32.IPropertyStore store = (Shell32.IPropertyStore)persist; Dictionary <Wtypes.PROPERTYKEY, object> results = new Dictionary <Wtypes.PROPERTYKEY, object>(); foreach (Wtypes.PROPERTYKEY key in keys) { Wtypes.PROPERTYKEY pkey = key; // iteration variables are read-only and we need to pass by ref object pv; store.GetValue(ref pkey, out pv); results.Add(key, pv); } return(results); }
private void VerifySliders(TabBase tab, ShortcutHelper shortcut, SliderMeta.ExpectedPosition expected, Tabs.GlobalState consoleVersion) { IEnumerable <SliderMeta> sliders = tab.GetSlidersForVerification(); // collect up properties that we need to retrieve keys for IEnumerable <SliderMeta> propSliders = sliders.Where(slider => slider.PropKey != null); IEnumerable <Wtypes.PROPERTYKEY> keys = propSliders.Select(slider => slider.PropKey).Cast <Wtypes.PROPERTYKEY>(); // fetch data for keys IDictionary <Wtypes.PROPERTYKEY, object> propertyData = shortcut.GetFromPropertyStore(keys); // enumerate each slider and validate data foreach (SliderMeta meta in sliders) { string sliderName = AutoHelpers.FormatInvariant("Slider: {0}", meta.ValueName); Wtypes.PROPERTYKEY key = (Wtypes.PROPERTYKEY)meta.PropKey; short value = (short)propertyData[key]; int transparency = 0; switch (expected) { case SliderMeta.ExpectedPosition.Maximum: transparency = meta.GetMaximum(); break; case SliderMeta.ExpectedPosition.Minimum: transparency = meta.GetMinimum(); break; default: throw new NotImplementedException(); } if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { Verify.AreEqual(value, RescaleSlider(transparency), sliderName); } } }
private void VerifyBoxes(TabBase tab, ShortcutHelper shortcut, bool inverse, Tabs.GlobalState consoleVersion) { IEnumerable <CheckBoxMeta> boxes = tab.GetCheckboxesForVerification(); // collect up properties that we need to retrieve keys for IEnumerable <CheckBoxMeta> propBoxes = boxes.Where(box => box.PropKey != null); IEnumerable <Wtypes.PROPERTYKEY> keys = propBoxes.Select(box => box.PropKey).Cast <Wtypes.PROPERTYKEY>(); // fetch data for keys IDictionary <Wtypes.PROPERTYKEY, object> propertyData = shortcut.GetFromPropertyStore(keys); // enumerate each box and validate the data foreach (CheckBoxMeta meta in propBoxes) { string boxName = AutoHelpers.FormatInvariant("Box: {0}", meta.ValueName); Wtypes.PROPERTYKEY key = (Wtypes.PROPERTYKEY)meta.PropKey; bool?value = (bool?)propertyData[key]; Verify.IsNotNull(value, boxName); if (consoleVersion == Tabs.GlobalState.ConsoleV1 && meta.IsV2Property) { AutoHelpers.LogInvariant("Skipping validation of v2 property {0} after switching to v1 console.", meta.ValueName); } else { // A box can be inverse if checking it means false in the registry. // This method can be inverse if we're turning off the boxes and expecting it to be on. // Therefore, a box will be false if it's checked and supposed to be off. Or if it's unchecked and supposed to be on. if ((meta.IsInverse && !inverse) || (!meta.IsInverse && inverse)) { Verify.IsFalse(value.Value, boxName); } else { Verify.IsTrue(value.Value, boxName); } } } }
public void SetToPropertyStore(IDictionary <Wtypes.PROPERTYKEY, object> properties) { if (properties == null) { throw new NotSupportedException(AutoHelpers.FormatInvariant("Properties passed cannot be null.")); } Shell32.IPersistFile persist = (Shell32.IPersistFile) new Shell32.ShellLink(); persist.Load(this.ShortcutPath, (uint)ObjBase.STGM.STGM_READWRITE); Shell32.IPropertyStore store = (Shell32.IPropertyStore)persist; foreach (Wtypes.PROPERTYKEY key in properties.Keys) { Wtypes.PROPERTYKEY pkey = key; // iteration variables are read-only and we need to pass by ref object pv = properties[key]; store.SetValue(ref pkey, ref pv); } persist.Save(null, true); }