注册您的扩展并不是特别困难,但必须精确完成,否则用户将永远不会找到您的扩展名。考虑以下注册表项,其中一些是任何命名空间扩展所必需的。
命名空间扩展名(如所有COM对象)必须在CLSID部分中注册。此外,他们还必须是“公寓意识”,将命名值ThreadingModel设置为公寓,如下所示。
HKEY_CLASSES_ROOT\CLSID\{【CLSID】}
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\InProcServer32\(default)=path\filename.dll
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\InProcServer32\"ThreadingModel" = "Apartment"
如果您的命名空间扩展将在rooted Explorer下运行,则应添加以下条目,以便Open和Explorer动词出现在命名空间扩展名上。
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\Shell\Open\Command\(default)
=c:\windows\explorer.exe/root,%1
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\Shell\Explore\Command\(default)
=c:\windows\explorer.exe/e,/root/%1
您还可以在默认图标的以下键下面包含条目。
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\DefaultIcon\(default)="path\filename.dll",IconIndex
以下是可选键,但可以非常重要。如果在...{【CLSID】} \\ ShellFolder下包含名为“Attributes”的值,则可以使用IShellFolder::GetAttributesOf方法返回的SFGAO_ *标志来指定连接点的属性。
HKEY_CLASSES_ROOT_CLSID\{【CLSID】}\ShellFolder\Attributes = 0000 00 00
例如,如果设置了SFGAO_FOLDER标志并且其连接点存在于系统命名空间中,则用户会在资源管理器的左窗格中看到您的扩展名的图标,并且可以使用标准(非线性)资源管理器浏览它。如果未设置此标志,则必须提供一个根管理的浏览器
另一个例子是SFGAO_HASSUBFOLDER标志。如果设置好,资源管理器可以通过在左侧显示+图标,将扩展名的图标扩展到更高的级别。
您应该知道的其他注册表项包括将项目放入MyComputer或桌面上所需的注册表项。以下条目列出了这两个位置中的所有项目:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
\MyComputer\NameSpace
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer
\Desktop\NameSpace
最后,以下条目目前仅适用于Windows NT,但应包含【总是】以备将来兼容。这是shell加载的扩展列表。NT上的shell不会加载此列表上的扩展名。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\ShellExtensions
\Approved\{【CLSID】}="【扩展名称】"