1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Runtime.InteropServices;
- using System.Text;
- using System.Threading.Tasks;
- 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)
- {
- // The stuff that was above here is basically the same
- RegistryKey BaseKey;
- RegistryKey OpenMethod;
- RegistryKey Shell;
- RegistryKey CurrentUser;
- BaseKey = Registry.ClassesRoot.CreateSubKey(Extension);
- BaseKey.SetValue("", KeyName);
- OpenMethod = Registry.ClassesRoot.CreateSubKey(KeyName);
- OpenMethod.SetValue("", FileDescription);
- OpenMethod.CreateSubKey("DefaultIcon").SetValue("", "\"" + OpenWith + "\",0");
- Shell = OpenMethod.CreateSubKey("Shell");
- Shell.CreateSubKey("edit").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
- Shell.CreateSubKey("open").CreateSubKey("command").SetValue("", "\"" + OpenWith + "\"" + " \"%1\"");
- BaseKey.Close();
- OpenMethod.Close();
- Shell.Close();
- // Delete the key instead of trying to change it
- CurrentUser = Registry.CurrentUser.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\FileExts\\" + Extension, true);
- CurrentUser.DeleteSubKey("UserChoice", false);
- CurrentUser.Close();
- // Tell explorer the file association has been changed
- SHChangeNotify(0x08000000, 0x0000, IntPtr.Zero, IntPtr.Zero);
- }
- }
- }
|