1

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

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

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

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

该键HKEY_CLASSES_ROOT\.log具有默认值txtfile,并包含一个名为 的子键PersistentHandler。这个子键会是问题的根源吗?

4

2 回答 2

1

添加另一个注册表键(例如HKEY_CLASSES_ROOT\logfile),shell在该键下创建结构并将键的默认值更改.loglogfile。一种方法是将以下行保存到.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。用户条目优先于系统条目。当您想要更改文件关联或为您自己的用户添加自定义操作但没有系统管理员权限时,这很有用。

于 2014-01-04T13:13:16.497 回答
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 之后,因此这些注册的优先级较低。即使用户更改默认程序,这些 SystemFileAssociations 注册也是稳定的,并提供一个位置来注册始终可用于特定文件类型的辅助动词。

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

于 2017-03-24T13:40:57.130 回答