如何在Windows上下文菜单中为具有特定扩展名的文件添加条目?

时间:2012-05-16 12:52:14

标签: windows registry contextmenu

我知道有很多关于如何自定义shell上下文菜单的问题,但我尝试过的却没有用,所以我添加了一个新问题。

我想在右键单击带有“.log”扩展名的文件时在上下文菜单中添加“使用日志查看器打开”条目,以便不更改与.log文件(记事本)关联的默认应用程序,但允许用户选择自定义应用程序来打开它们。

为此,我打开了注册表项HKEY_CLASSES_ROOT\.log,并添加了一些具有正确值的键shell\OpenWithLogViewer\command,但是当我右键单击带有.log扩展名的文件时,不会显示该条目

你知道如何解决这个问题吗?

密钥HKEY_CLASSES_ROOT\.log具有默认值txtfile,并包含一个名为PersistentHandler的子项。这个子项可以成为问题的根源吗?

2 个答案:

答案 0 :(得分:1)

添加另一个注册表项(例如HKEY_CLASSES_ROOT\logfile),在该项下方创建shell结构,并将.log项的默认值更改为logfile。一种方法是将以下行保存到.reg文件并将该文件合并到注册表中。

Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.log]
@="logfile"

[HKEY_CLASSES_ROOT\logfile]

[HKEY_CLASSES_ROOT\logfile\shell]
@="OpenWithLogViewer"
; make OpenWithLogViewer the default action

[HKEY_CLASSES_ROOT\logfile\shell\OpenWithLogViewer]
@="Open with &Log Viewer"
; set label and access key

[HKEY_CLASSES_ROOT\logfile\shell\OpenWithLogViewer\command]
@="\"C:\\path\\to\\logviewer.exe\" %1"


这将类型(logfile)与扩展名(.log)分开。这样,您可以在一个位置定义类型的可能操作,并将任意扩展与该类型相关联。

请注意,您还可以使用HKEY_CURRENT_USER\Software\Classes代替HKEY_CLASSES_ROOT按用户定义此内容。用户条目优先于系统条目。当您想要为自己的用户更改文件关联或添加自定义操作但在系统上没有管理员权限时,这非常有用。

答案 1 :(得分:1)

如果您想为文件扩展名添加条目而不是“拥有”而您永远不想成为默认操作,那么您可以使用SystemFileAssociations键:

[HKEY_CLASSES_ROOT\SystemFileAssociations\.log\shell\mycommand]
@="My Command"

[HKEY_CLASSES_ROOT\SystemFileAssociations\.log\shell\mycommand\command]
@="\"c:\\path\\myapp.exe\" \"%1\""
  

要主动处理更改默认程序的后果,您可以使用HKEY_CLASSES_ROOT \ SystemFileAssociations来注册谓词和其他关联信息。由于它们位于关联数组中的ProgID之后,因此这些注册的优先级较低。即使用户更改默认程序,这些SystemFileAssociationsregistration也是稳定的,并提供一个位置来注册始终可用于特定文件类型的辅助动词。

此密钥适用于Windows XP及更高版本......