IShellExtInit接口

IShellExtInit接口用于Shell初始化Shell扩展对象的初始化工作。当用户需要定制Shell的快捷菜单或者属性页时,需实现IContextMenu或IShellPropSheetExt接口的同时,
还需实现IShellExtInit接口.Shell会自动调用该接口的Initialize方法来初始化Shell扩展对象。

例如:实现快捷菜单时需要知道选中的文件列表,可如下实现Initialize方法

 

HRESULT STDMETHODCALLTYPE Initialize( LPCITEMIDLIST pidlFolder, IDataObject *pdtobj, HKEY hkeyProgID)
{
    
//文件列表
    if( pdtobj != NULL ) 
    {
        STGMEDIUM stg 
= { TYMED_HGLOBAL };
        FORMATETC etc 
= { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
        
//从pdtobj中获取文件列表指针,它们存储在HDROP格式中
        if( SUCCEEDED( pdtobj->GetData( &etc, &stg ) ) ) 
        {
            
//取得HDROP句柄
            HDROP hDrop = (HDROP) ::GlobalLock( stg.hGlobal );
            
//获取该操作中被选中的文件的数目
            UINT uCount = ::DragQueryFile( hDrop, (UINT) -1, NULL, 0 );
            
for( UINT uIndex = 0; uIndex < uCount; uIndex++ ) 
            {
                TCHAR szFileName[MAX_PATH] 
= { 0 };
                
//获取文件名
                ::DragQueryFile(hDrop, uIndex, szFileName, (sizeof(szFileName) / sizeof(TCHAR)) - 1);
                
                
//szFileName为文件(夹)名
            }
            ::GlobalUnlock( stg.hGlobal );
            ::ReleaseStgMedium( 
&stg );
        }
    }    
    
return S_OK;
}

 

PS:一定要返回S_OK表示初始化成功,否则您的代码将不会被右击事件调用了 

posted @ 2009-04-09 10:38  孤竹君  阅读(2080)  评论(0编辑  收藏  举报