遵循创建快捷菜单处理程序,将非规范动词添加到快捷菜单:
HKEY_CLASSES_ROOT
.myp-ms
(Default) = MyProgram.1
MyProgram.1
(Default) = My Program Application
Shell
(Default) = doit
doit
(Default) = &Do It
command
(Default) = c:\MyDir\MyProgram.exe /d "%1"
我正在尝试为我的自定义
.base85
文件类型添加一个:
HKEY_CLASSES_ROOT
.base85
(Default) = Base85FileType
Base85FileType
(Default) = Base-85 Encoded File
Shell
(Default) = decode
decode
(Default) = &Decode It
command
(Default) = notepad.exe "%1"
你可以在我的
.reg
转储中看到:
Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\.base85]
@="Base85FileType"
[HKEY_CLASSES_ROOT\Base85FileType]
@="Base-85 Encoded File"
[HKEY_CLASSES_ROOT\Base85FileType\shell]
@="decode"
[HKEY_CLASSES_ROOT\Base85FileType\shell\decode]
@="&Decode It"
[HKEY_CLASSES_ROOT\Base85FileType\shell\decode\command]
@="notepad.exe \"%1\""
但是没有出现“D͟ecode It”上下文菜单选项。我做错了什么?
Windows 甚至无法识别文件类型描述 “Base-85 编码文件”,而是显示默认的
BASE85 File
:
我尝试过重新启动。
尝试后你会得到什么?
您的注册是正确的,但系统上的某些内容已经声明了该扩展名。它存储在未记录的 Explorer FileExts 键中,其中扩展名映射到其“有效”ProgID。
用户可以在“设置”应用程序中明确选择默认应用程序,或者(取决于 Windows 版本)在使用“打开方式”功能时强制选择默认应用程序。当使用“打开方式”功能设置默认值时,ProgId 通常看起来像“Applications\Example.exe”。这很可能在您的情况下,因为文件类型没有真正的描述。
系统应该足够智能,能够理解已安装的新应用程序想要与现有扩展关联,并在其“继续使用”模式下弹出一个 toast 或“打开方式”对话框(取决于Windows 版本)。对于每个扩展,每个用户可能只会发生一次,并且在开发过程中可能很容易错过。
即使查询哪个 ProgId 是“有效”默认值也很困难。在支持它的系统上,使用
ASSOCSTR_PROGID
,否则回退到 IApplicationAssociationRegistration::QueryCurrentDefault
。