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

标签 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# 手动刷新文件关联?

最佳答案

我想我已经找到了一个解决方案,它是这样的 - 定义:

    [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

关于c# - 扩展 Windows 资源管理器上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8058971/

相关文章:

registry - 无法通过 Inno Setup Installer 更改注册表项

windows - 使用 powershell 我想获取拥有域管理员权限的人员列表?

java - 服务器和客户端之间的共享 Jar 文件 -- NoClassDefFoundError

Python:在 Windows 7 上使用 _winreg 编辑注册表值时出现 WindowsError

c# - 当 SSL 不可行时,最好的 WCF 安全模式是什么

windows - 没有 HTTP.SYS 的 WCF

c++ - RegOpenKeyEx 给出错误 2 或错误 161,两种方式均失败

c# - 在 for 循环中制作 var

c# - ASP.NET CommandArgument Eval 可以包含 2 列吗?

c# - 如何通过 HttpClient PostAsync 方法将文件和参数上传到远程服务器?