C++ 显示一个图标覆盖所有空文件夹

标签 c++ windows shell overlay windows-shell

我正在寻找 C++ 解决方案以在文件夹上显示图标叠加。但我注意到在 .NET\Java +Shell 中编写覆盖代码确实是个坏主意,因为在使用资源管理器时一直会调用解释器。

所以我有示例如何在包含一些文本的文件上添加图标:http://www.codeproject.com/KB/shell/overlayicon.aspx

我需要用我的图标标记所有空文件夹。我怎样才能做到这一点?

非常感谢任何帮助。

最佳答案

您需要创建一个实现 IShellIconOverlayIdentifier 的 COM 对象,就像该代码项目文章一样。

您的 IsMemberOf 方法将如下所示:

STDMETHODIMP YourClassThatImplementsIShellIconOverlayIdentifier::IsMemberOf(PCWSTR pwszPath,DWORD Attr)
{
    if (!(Attr&FILE_ATTRIBUTE_DIRECTORY)) return S_FALSE; // Not a folder

    UINT count = 0;
    WIN32_FIND_DATAW wfd;
    LPWSTR bufSpec = (LPWSTR) LocalAlloc(LPTR,(lstrlenW(pwszPath)+2+1)*sizeof(WCHAR));
    if (bufSpec)
    {
        lstrcpyW(bufSpec,pwszPath);
        PathAddBackslashW(bufSpec);
        lstrcatW(bufSpec,L"*");
        HANDLE hFind = FindFirstFileW(bufSpec,&wfd);
        if (INVALID_HANDLE_VALUE!=hFind) do
        {
            ++count;
        } while( count<= 2 && FindNextFileW(hFind,&wfd) );
        FindClose(hFind);
        LocalFree(bufSpec);
    }

    return count==2 ? S_OK : S_FALSE;
}

(空文件夹包含两个特殊条目,“.”和“..”)

关于C++ 显示一个图标覆盖所有空文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5682891/

相关文章:

c++ - 是否可以将 Cinder 与 VS2013 一起使用?

windows - Windows 上的 Mongodb 性能

c - 尝试使用 mingw 构建和编译 lua 5.3.3 , undefined reference 错误

linux - bash 及其引用规则的问题

c - 确定进程输出是否在 C/C++ 中被重定向

c++ - 从 C++ 程序启动 IE

c++ - 使用 "system()"执行 cmd 不查找路径

c++ - 在 C++ 中重写类的层次结构

python - 如何编写 Python 包/模块?

java - 使用 Java 获取 awk 返回值