2012年7月3日 星期二

Shell Extesion註冊表項完全解釋


對桌面圖標添加透明的覆蓋圖標,這個接口在shell extension裡面需要實現IShellIconOverlayIdentifier接口,這個功能其實用得比較多,如TORTOISE CVS,當我們添加一個模塊到CVS時,這個模塊文件夾裡面的文件(夾)就會在原有的圖標上附加一個個性化的圖標以示當前文件(夾)的狀態,比如已添加、已更新、未添加等等狀態。這個SHELL的註冊表項比較簡單,除了在HKEY_CLASSES_ROOT\CLSID下添加實現的CLSID之外,只需要在HKEY_LOCAL_MACHINE\Software\Microsoft
Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\下添加你個實現的CLSID就可以了。具體的模式如下:

一、HKEY_CLASSES_ROOT

CLSID
{00000000-1111-2222-3333-444444444444}
InProcServer32
(Default) = C:\MyDir\MyCommand.dll
ThreadingModel= Apartment
二、HKEY_LOCAL_MACHINE

Software
Microsoft
Windows
CurrentVersion
Explorer
ShellIconOverlayIdentifiers
MyOverlay
(Default) = {MyOverlay CLSID GUID}
註:其實很多情況下,我們是需要一個DLL來實現數個接口的功能,這樣,這個情況下對這個DLL的註冊,可以有兩種情況選擇,一是一個CLSID對應多個接口功能,只是不同的擴展需要附加的註冊。但都是映射到這個CLASSID,然後找到這個DLL,在DLL的DllGetClassObject中也不需要有特別的處理。但是這種方法顯得邏輯有些混亂。另一種方法是數個接口數個CLSID對應一個DLL,在DllGetClassObject要把數個接口的CLSID都可以找到CLASSFACTORY。這樣顯得邏輯清晰。


Registering Icon Overlay Handlers
In addition to normal COM registration, you must also create a subkey named for the handler under this key.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  ShellIconOverlayIdentifiersSet the default value of the subkey to the string form of the object's class identifier (CLSID) GUID. The following example illustrates how to register an icon overlay handler named MyOverlay.



HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  ShellIconOverlayIdentifiers
                     MyOverlay
                        (Default) = {MyOverlay CLSID GUID}Implementing Icon Overlay Handlers
Icon overlay handlers are in-process COM objects, implemented as DLLs. They export one interface in addition to IUnknown: IShellIconOverlayIdentifier. This interface has three methods: IShellIconOverlayIdentifier::GetOverlayInfo, IShellIconOverlayIdentifier::GetPriority, and IShellIconOverlayIdentifier::IsMemberOf.

沒有留言:

張貼留言