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