扩展Windows资源管理器上下文菜单

时间:2011-11-09 00:29:39

标签: c# windows registry associations contextmenu

我很难弄清楚为什么这在我的电脑上不起作用。我已经阅读了这篇文章http://msdn.microsoft.com/en-us/library/bb776820.aspx并尝试了它,它适用于未知的文件类型,但是对于知道如.bmp它没有 - 我也删除了.bmp下的其他键 - 没有救命。我在HKEY_CLASSES_ROOT.bmp和HKEY_CURRENT_USER \ Software \ Microsoft \ Windows \ CurrentVersion \ Explorer \ FileExts.bmp中尝试了这个 我需要在我的程序中实现它,因此它在某些文件类型(如bmp)上有自定义上下文菜单项。 顺便说一句。我试过ContextEdit(一个免费软件程序) - 也没用 - 任何想法?也许一些不令人耳目一新的东西(我试图重新启动 - 没有做任何改动)?

编辑: 一个更新 - 如果我出于某种原因进入设置默认程序和Windows照片查看器,我无法禁用某些文件类型,如.jpg,.bmp,.gif。那很奇怪......

编辑没有。 2: 现在它开始工作,我已经确定了问题 - 即使重新启动计算机后文件关联也没有刷新。将txt文件关联到其他编辑器后,我的.bmp菜单,图标和默认程序已更改。所以现在的主要问题是 - 如何使用C#手动刷新文件关联?

1 个答案:

答案 0 :(得分:2)

我想我找到了这个解决方案,就像这样 - 定义:

    [DllImport("shell32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern void SHChangeNotify(uint wEventId, uint uFlags, IntPtr dwItem1, IntPtr dwItem2);

    const uint SHCNF_IDLIST = 0x0;
    const uint SHCNE_ASSOCCHANGED = 0x08000000;

然后在需要时执行带有关联的代码,然后执行:

    SHChangeNotify(SHCNE_ASSOCCHANGED, SHCNF_IDLIST, IntPtr.Zero, IntPtr.Zero);

如果提到的注册表项不起作用,请尝试:

    HKEY_CLASSES_ROOT\SystemFileAssociations\extension\Shell\yourcommand