我很难弄清楚为什么这在我的电脑上不起作用。我读过这篇文章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/