zoukankan      html  css  js  c++  java
  • 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表示初始化成功,否则您的代码将不会被右击事件调用了 

  • 相关阅读:
    浅谈左偏树入门
    【洛谷3768】简单的数学题(莫比乌斯反演+杜教筛)
    【51nod1743】雪之国度(最小生成树+倍增)
    【BZOJ1562】[NOI2009] 变换序列(匈牙利算法)
    【HHHOJ】NOIP模拟赛 玖 解题报告
    【BZOJ3930】[CQOI2015] 选数(容斥)
    【BZOJ1257】[CQOI2007] 余数之和(除法分块)
    杜教筛入门
    初学狄利克雷卷积
    关于积性函数的一些知识
  • 原文地址:https://www.cnblogs.com/fangkm/p/1432245.html
Copyright © 2011-2022 走看看