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;
}
{
// 文件列表
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表示初始化成功,否则您的代码将不会被右击事件调用了