我想创建一个命名空间shell扩展,它允许用户直接在Windows资源管理器中浏览我的存档内容(如zip文件)。我在创建NSE方面有一些经验,对我来说实现所有nessesary接口并不是问题。我唯一不明白如何在Windows注册表中注册这样的NSE。如何强制资源管理器以编程方式从上下文菜单外壳扩展(在新窗口或同一窗口中)打开我的存档。
更新
我检查了.zip注册表项并尝试以相同的方式注册我的NSE。
我的扩展名为.0003。我创建了以下键:
[HKEY_CLASSES_ROOT\.0003]
@="TCIntegrationPack.64.TWCXNamespace"
[HKEY_CLASSES_ROOT\TCIntegrationPack.64.TWCXNamespace]
@="test only"
[HKEY_CLASSES_ROOT\TCIntegrationPack.64.TWCXNamespace\CLSID]
@="{B1BE3C6B-25E2-47DE-8AB9-878FCA3CD01A}"
[HKEY_CLASSES_ROOT\TCIntegrationPack.64.TWCXNamespace\Shell]
[HKEY_CLASSES_ROOT\TCIntegrationPack.64.TWCXNamespace\Shell\open]
"MultiSelectMode"="Document"
[HKEY_CLASSES_ROOT\TCIntegrationPack.64.TWCXNamespace\Shell\open\Command]
@="%SystemRoot%\\Explorer.exe /idlist,%I,%L"
"DelegateExecute"="{11dbb47c-a525-400b-9e80-a54615a090c0}"
[HKEY_CLASSES_ROOT\CLSID\{B1BE3C6B-25E2-47DE-8AB9-878FCA3CD01A}]
@="TCIntegrationPack.64.TWCXNamespace"
[HKEY_CLASSES_ROOT\CLSID\{B1BE3C6B-25E2-47DE-8AB9-878FCA3CD01A}\InprocServer32]
@="F:\\Delphi\\Projects\\TCIntegrationPack\\Win64\\Debug\\TCIntegrationPack.64.dll"
"ThreadingModel"="Apartment"
[HKEY_CLASSES_ROOT\CLSID\{B1BE3C6B-25E2-47DE-8AB9-878FCA3CD01A}\ShellFolder]
"Attributes"=dword:08000000
为了测试,我运行以下命令:
explorer.exe / root,{B1BE3C6B-25E2-47DE-8AB9-878FCA3CD01A},“f:\ 1.0003”
我在日志中看到以下内容:
TWCXNamespaceRootFolder is created
TWCXNamespaceRootFolder.QueryInterface IShellFolder out Result=S_OK
TWCXNamespaceRootFolder.IShellFolder.BindToObject started
TWCXNamespaceRootFolder.IShellFolder.BindToObject in AItemIDList=F:\
TWCXNamespaceRootFolder.IShellFolder.BindToObject in AReserved=0000000000000000
TWCXNamespaceRootFolder.IShellFolder.BindToObject in AIID=IShellFolder
TWCXNamespaceRootFolder.IShellFolder.BindToObject out Result=E_NOTIMPL
TWCXNamespaceRootFolder.IShellFolder.BindToObject finished
TWCXNamespaceRootFolder is destroyed
Shell请求我文件的父文件夹的IShellFolder接口。这是正常的吗?我的错误在哪里?
更新2
问题解决了。有必要添加其他注册表项
HKCR\CLSID\{extension CLSID}\Implemented Categories\{00021490-0000-0000-C000-000000000046}
此资源管理器正确使用我的扩展程序。可以找到一些扣留here。