SHChangeNotify (shell32)
Last changed: -37.252.89.26

.
Summary

C# Signature:

[DllImport("shell32.dll")]
static extern void SHChangeNotify(HChangeNotifyEventID wEventId,
                                   HChangeNotifyFlags uFlags,
                                   IntPtr dwItem1,
                                   IntPtr dwItem2);

VB Signature:

    <DllImport("shell32.dll")> _
    Shared Sub SHChangeNotify( _
    ByVal wEventID As HChangeNotifyEventID, _
    ByVal uFlags As HChangeNotifyFlags, _
    ByVal dwItem1 As IntPtr, _
    ByVal dwItem2 As IntPtr)
    End Sub

User-Defined Types:

enum HChangeNotifyEventID

enum HChangeNotifyFlags

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

        private void CheckFileAssociation(string ExePath, string FileExt, string Description, string Icon, string ActionName, string FileCommand, string DDECommandString, string App, string Topic)
        {
            RegistryKey RegKey = Registry.ClassesRoot.CreateSubKey("." + FileExt);
            RegKey.SetValue("", FileExt + "File");
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + "File");
            RegKey.SetValue("", Description);
            RegKey.SetValue("EditFlags", 0);
            RegKey.SetValue("BrowserFlags", 8);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\DefaultIcon");
            RegKey.SetValue("", Icon, RegistryValueKind.ExpandString);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell");
            RegKey.SetValue("", FileCommand);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell\" + FileCommand);
            RegKey.SetValue("", ActionName);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell\" + FileCommand + @"\command");
            RegKey.SetValue("", "\"" + ExePath + "\"");
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell\" + FileCommand + @"\ddeexec");
            RegKey.SetValue("", DDECommandString);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell\" + FileCommand + @"\ddeexec\Application");
            RegKey.SetValue("", App);
            RegKey = Registry.ClassesRoot.CreateSubKey(FileExt + @"File\shell\" + FileCommand + @"\ddeexec\Topic");
            RegKey.SetValue("", Topic);
            //credits to pinvoke.net
            SHChangeNotify(HChangeNotifyEventID.SHCNE_ASSOCCHANGED, HChangeNotifyFlags.SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);
        }

            CheckFileAssociation(
                Application.ExecutablePath, //Application exe path
                "mcl", //Document file extension
                "Celerity Message ControL file", //Document type description
                @"%SystemRoot%\system32\shell32.dll,-152", //Document type icon
                "Open MCL File", //Action name
                "Open", //File command
                "[OpenMCL(\"%1\")]", //DDE command string
                "CelerityEDIToolbox", //Application
                "System"); //Topic

Alternative Managed API:

Do you know one? Please contribute it!

Documentation