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

  • 相关阅读:
    【SQL查询】查询列中使用条件逻辑_case when then end
    【SQL查询】查询的列起别名_AS
    【SQL查询】查询的值为空时,给出默认值_NVL函数
    工薪阶层理财建议
    软件文档编写_软件开发过程中的文档
    等价边界值测试_日期
    【登录】测试用例
    来纪中的第一天
    普及C组第二题(8.1)
    普及C组第一题(8.1)
  • 原文地址:https://www.cnblogs.com/fangkm/p/1432245.html
Copyright © 2011-2022 走看看