【问题标题】:Extending windows explorer context menu扩展 Windows 资源管理器上下文菜单
【发布时间】:2011-12-24 22:19:20
【问题描述】:

我很难弄清楚为什么这在我的计算机上不起作用。我已经阅读了这篇文章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# 手动刷新文件关联?

【问题讨论】:

  • 您是否尝试更改某些类型的文件扩展名的快捷菜单的行为?如果是这样,请在 Explorer->Tools->Folder Options->Advanced 和一个唯一的名称(如 ZEBRA001)中进行更改,然后在 regedit 中查找该名称并查看发生了什么变化。
  • 是的,但这里的问题是您在 Windows 7 中的文件夹选项或其他任何地方都没有文件类型。至于这样做的免费软件应用程序 - 他们像文章中描述的那样做了,它适用于新的文件类型,而对于旧的(即使你像文章中那样手动执行)它不起作用。所以我认为还有一些其他的值需要改变......

标签: c# windows registry associations contextmenu


【解决方案1】:

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

    [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

【讨论】:

  • 不知道为什么,但HKEY_CLASSES_ROOT\SystemFileAssociations 在我的机器中不存在。
猜你喜欢
  • 1970-01-01
  • 2012-04-05
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
相关资源
最近更新 更多