public sealed record FileType(string Extension, string MimeType, PercievedFileType PercievedType);
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); } }
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); } }