Sic.Framework-Nanjing-Baishi/MECF.Framework.Common/MECF/Framework/Common/Utilities/FileAssociation.cs

32 lines
1.4 KiB
C#
Raw Normal View History

2023-04-13 11:51:03 +08:00
using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;
namespace MECF.Framework.Common.Utilities
{
public class FileAssociation
{
[DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);
public static void SetAssociation(string Extension, string KeyName, string OpenWith, string FileDescription)
{
RegistryKey registryKey = Registry.ClassesRoot.CreateSubKey(Extension);
registryKey.SetValue("", KeyName);
RegistryKey registryKey2 = Registry.ClassesRoot.CreateSubKey(KeyName);
registryKey2.SetValue("", FileDescription);
registryKey2.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0");
RegistryKey registryKey3 = registryKey2.CreateSubKey("Shell");
registryKey3.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\" \"%1\"");
registryKey3.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\" \"%1\"");
registryKey.Close();
registryKey2.Close();
registryKey3.Close();
RegistryKey registryKey4 = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + Extension, writable: true);
registryKey4.DeleteSubKey("UserChoice", throwOnMissingSubKey: false);
registryKey4.Close();
SHChangeNotify(134217728u, 0u, IntPtr.Zero, IntPtr.Zero);
}
}
}