微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

windows shell 扩展覆盖无法显示

如何解决windows shell 扩展覆盖无法显示

大家, 我使用 Flickr 驱动外壳扩展( https://www.viksoe.dk/code/flickrdrive.htm ) 去写个云盘,发现覆盖扩展和左边的树无法正常显示。 Overlay扩展在其他本地盘可以正常显示,但无法显示云盘中的文件夹。可以显示资源管理器左侧树中的二级目录,但无法显示二级以下的目录。 如图,现在想问一下怎么解决

#pragma once

class CShellFolder;

class ATL_NO_VTABLE COverlayIcon:
    public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<COverlayIcon,&CLSID_OverlayIcon>,//public IdispatchImpl<IMyOverlayIcon,&IID_IMyOverlayIcon,&LIBID_OverlayIconLib,/*wMajor =*/ 1,/*wMinor =*/ 0>,public IShellIconOverlayIdentifier
{
public: 

    //DECLARE_REGISTRY_RESOURCEID(IDR_MYOVERLAYICON)
    CRefPtr<CShellFolder> m_spFolder;
    CComPtr<IDataObject> m_spDataObject;    
    CPidl m_pidlItem;
    bool m_bAcceptFmt;

    BEGIN_COM_MAP(COverlayIcon)
        //COM_INTERFACE_ENTRY(Idispatch)
        COM_INTERFACE_ENTRY(IShellIconOverlayIdentifier)
    END_COM_MAP()


    DECLARE_PROTECT_FINAL_CONSTRUCT()

    static HRESULT WINAPI UpdateRegistry(BOOL bRegister) throw();

    HRESULT Init(CShellFolder* pFolder,PCUITEMID_CHILD pidlItem,HWND hWnd);

    //STDMETHOD(IsMemberOf)(THIS_ _In_ PCWSTR pwszPath,DWORD dwAttrib);
    //STDMETHOD(GetoverlayInfo)(THIS_ _Out_writes_(cchMax) PWSTR pwszIconFile,int cchMax,_Out_ int * pIndex,_Out_ DWORD * pdwFlags) PURE;
    //STDMETHOD(GetPriority)(THIS_ _Out_ int * pIPriority) PURE;

    // IShellIconOverlayIdentifier Methods
    STDMETHOD(GetoverlayInfo)(LPWSTR pwszIconFile,int *pIndex,DWORD* pdwFlags);
    STDMETHOD(GetPriority)(int* pPriority);
    STDMETHOD(IsMemberOf)(LPCWSTR pwszPath,DWORD dwAttrib);    

};


#include "stdafx.h"
#include "OverlayIcon.h"
#include "ShellFolder.h"

STDMETHODIMP COverlayIcon::GetoverlayInfo(
    LPWSTR pwszIconFile,int* pIndex,DWORD* pdwFlags)
{
    //GetmodulefileNameW(_AtlBaseModule.GetModuleInstance(),pwszIconFile,cchMax);
    pwszIconFile = _T("c:\\test.ico");  

    *pIndex = 1;
    *pdwFlags = ISIOI_ICONFILE;// | ISIOI_ICONINDEX;
    MessageBox(NULL,_T("ss"),_T("sdf"),MB_OK);
    return S_OK;
}

// IShellIconOverlayIdentifier Method Implementation 

// returns the priority of this overlay 0 being the highest. 
// this overlay is always selected do to its high priority 
STDMETHODIMP COverlayIcon::GetPriority(int* pPriority)
{
    // highest priority
    *pPriority = 0;
    return S_OK;
}

// IShellIconOverlayIdentifier Method Implementation
// IShellIconOverlayIdentifier::IsMemberOf
// Returns Whether the object should have this overlay or not 
STDMETHODIMP COverlayIcon::IsMemberOf(LPCWSTR pwszPath,DWORD dwAttrib)
{
    //wchar_t *s = _wcsdup(pwszPath);
    HRESULT r = S_OK;

    //_wcslwr(s);

    //// Criteria
    //if (wcsstr(s,L"codeproject") != 0)
    //  r = S_OK;

    //free(s);

    return r;
}

HRESULT WINAPI COverlayIcon::UpdateRegistry(BOOL bRegister) throw()
{
    // COM registration is done by CShellFolder instance
    return S_OK;
}

HRESULT COverlayIcon::Init(CShellFolder* pFolder,HWND hWnd)
{
    ATLTRACE(L"CDropTarget::Init\n");
    ATLASSERT(m_spFolder == NULL);  
    m_spFolder = pFolder;
    m_pidlItem = pidlItem;
    return S_OK;
}

OBJECT_ENTRY_AUTO(CLSID_OverlayIcon,COverlayIcon)

[OverlayIcon 可以显示在本地磁盘][1] [1]:https://i.stack.imgur.com/762Zd.png [云盘上无法显示OverlayIcon][2] [2]:https://i.stack.imgur.com/ct2as.png 【二级目录无法显示,三级以下目录无法显示】[3] [3]:https://i.stack.imgur.com/JJspt.png

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。