Esempio n. 1
0
        public void LinkToFonts(RegistryKey fontLinkKey, FixedFontList toBeLinkedFonts)
        {
            for (var i = 0; i < Count; i++)
            {
                var baseFont = _linkedFonts[i];

                for (var j = 0; j < toBeLinkedFonts.Count; j++)
                {
                    var toBeLinkedFont = toBeLinkedFonts._linkedFonts[j];
                    LinkFonts(fontLinkKey, ref baseFont, ref toBeLinkedFont);
                }
            }
        }
Esempio n. 2
0
        private static void LinkFonts(RegistryKey fontLinkKey, ref FixedFont baseFont, ref FixedFont toBeLinkedFont)
        {
            FixedFontList     existingLinkedFonts;
            RegistryValueKind kind = 0;
            bool toAdd;

            // Determine if the font is a base font.
            var names     = fontLinkKey.GetValueNames();
            var valueName = baseFont.Name;

            if (Array.Exists(names, s => s.Equals(valueName, StringComparison.OrdinalIgnoreCase)))
            {
                // Get the value's type.
                kind = fontLinkKey.GetValueKind(valueName);

                // Type should be RegistryValueKind.MultiString, but we can't be sure.
                switch (kind)
                {
                case RegistryValueKind.String:
                    existingLinkedFonts = new FixedFontList((string)fontLinkKey.GetValue(valueName));
                    break;

                case RegistryValueKind.MultiString:
                    existingLinkedFonts = new FixedFontList((string[])fontLinkKey.GetValue(valueName));
                    break;

                default:
                    // Do nothing.
                    existingLinkedFonts = new FixedFontList();
                    break;
                }

                if (existingLinkedFonts.Contains(toBeLinkedFont))
                {
                    Console.Error.WriteLine("{1} is already linked to {0}", baseFont, toBeLinkedFont);
                    toAdd = false;
                }
                else
                {
                    // Font is not a linked font.
                    toAdd = true;
                }
            }
            else
            {
                // Font is not a base font.
                toAdd = true;
                existingLinkedFonts = new FixedFontList();
            }

            if (toAdd)
            {
                existingLinkedFonts.Add(toBeLinkedFont);
                // Change REG_SZ to REG_MULTI_SZ.
                if (kind == RegistryValueKind.String)
                {
                    fontLinkKey.DeleteValue(valueName, false);
                }

                fontLinkKey.SetValue(valueName, existingLinkedFonts.ToRegArray(), RegistryValueKind.MultiString);
                Console.WriteLine("Linked {1} to {0}", baseFont, toBeLinkedFont);
            }
        }