2011-11-09 115 views
1

我很难搞清楚为什么这不起作用在我的电脑上。我读过这篇文章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等一些文件类型上具有自定义上下文菜单项。 btw。我试过ContextEdit(一个免费软件) - 也没有用 - 有什么想法?也许不爽快(我试过重新启动 - 没有做任何改变)?扩展Windows资源管理器上下文菜单

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

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

+0

你是不是想改变快捷菜单某些类型的文件的行为扩展?如果是,请在资源管理器 - >工具 - >文件夹选项 - >高级和独特名称(如ZEBRA001)中进行更改,然后在注册表中查找该名称并查看更改内容。 – RetroCoder

+0

是的,但这里的问题是,在Windows 7下没有文件夹选项或其他任何地方的文件类型。至于这样做的免费软件应用程序,它们就像文章中描述的那样,它适用于新文件类型,而旧版本(即使是像文章中那样手动执行),它不起作用。所以我认为还有一些其他值需要更改... – n1tr0

回答

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 
+0

不知道为什么,但我的机器中不存在'HKEY_CLASSES_ROOT \ SystemFileAssociations'。 – ST3

相关问题