Пример #1
0
 public sealed record FileType(string Extension, string MimeType, PercievedFileType PercievedType);
Пример #2
0
        public static void RegisterFileType(string extension, string handlerName, string mimeType, PercievedFileType percievedType)
        {
            if (string.IsNullOrEmpty(extension))
            {
                throw new ArgumentNullException(nameof(extension));
            }
            if (string.IsNullOrEmpty(handlerName))
            {
                throw new ArgumentNullException(nameof(handlerName));
            }

            if (!extension.StartsWith("."))
            {
                extension = "." + extension;
            }

            bool changed = false;

            RegistryKey extensionKey = Registry.CurrentUser.CreateSubKey(Path.Combine(@"Software\Classes", extension));

            if (extensionKey != null)
            {
                extensionKey.SetValue(null, handlerName);

                if (!string.IsNullOrEmpty(mimeType) && ((string)extensionKey.GetValue("Content Type") != mimeType))
                {
                    extensionKey.SetValue("Content Type", mimeType, RegistryValueKind.String);
                    changed = true;
                }

                if ((percievedType != PercievedFileType.None) && ((string)extensionKey.GetValue("PerceivedType") != percievedType.ToString("g")))
                {
                    extensionKey.SetValue("PerceivedType", percievedType.ToString("g"), RegistryValueKind.String);
                    changed = true;
                }
            }

            if (changed)
            {
                Shell32.ChangeNotify(ChangeNotifyEventId.AssociationChanged, ChangeNotifyFlags.IdList);
            }
        }
Пример #3
0
        public static void RegisterFileType(string extension, string handlerName, string mimeType, PercievedFileType percievedType)
        {
            if (string.IsNullOrEmpty(extension))
            {
                throw new ArgumentNullException(nameof(extension));
            }
            if (string.IsNullOrEmpty(handlerName))
            {
                throw new ArgumentNullException(nameof(handlerName));
            }

            if (!extension.StartsWith("."))
            {
                extension = "." + extension;
            }

            bool changed = false;

            RegistryKey?extensionKey = Microsoft.Win32.Registry.CurrentUser.CreateSubKey(Path.Combine(@"Software\Classes", extension));

            if (extensionKey is not null)
            {
                extensionKey.SetString(null, handlerName);

                if (!string.IsNullOrEmpty(mimeType) && !string.Equals(extensionKey.GetString("Content Type"), mimeType, StringComparison.InvariantCulture))
                {
                    extensionKey.SetString("Content Type", mimeType);
                    changed = true;
                }

                if ((percievedType != PercievedFileType.None) && !string.Equals(extensionKey.GetString("PerceivedType"), percievedType.ToString("g"), StringComparison.InvariantCulture))
                {
                    extensionKey.SetString("PerceivedType", percievedType.ToString("g"));
                    changed = true;
                }

                RegistryKey?openWithKey = extensionKey.CreateSubKey("OpenWithProgids");
                if (openWithKey is not null)
                {
                    if (!openWithKey.ContainsName(handlerName))
                    {
                        openWithKey.AddName(handlerName);
                        changed = true;
                    }
                }
            }

            if (changed)
            {
                Shell32.ChangeNotify(ChangeNotifyEventId.AssociationChanged, ChangeNotifyFlags.IdList);
            }
        }