【问题标题】:Windows Explorer Overlay Icons - how to start?Windows 资源管理器覆盖图标 - 如何开始?
【发布时间】:2016-05-18 07:28:39
【问题描述】:

我目前正在尝试使用 Visual C++ 为 Windows 资源管理器实现覆盖图标。为此,我阅读了 Microsoft MSDN 上的信息(说我必须实现 IShellIconOverlayIdentifier)以及 Internet 上的其他一些资源。

我的问题是,我无法让程序运行。我认为,当我能够简单地显示任何图标时,实现选择正确图标的逻辑是没有问题的。

首先我尝试创建一个 Windows 服务,但似乎我无法实现该接口。现在我更改为 DLL 并且不再有任何编译器错误,但是当我尝试注册时,它说模块已加载,但找不到入口点 DllRegisterServer。问题似乎是我没有 COM Server,但我真的需要它吗?

我还在CodeProject.com 上找到了一个指南,它也没有任何编译器错误,只是没有显示任何图标而没有任何错误。

那么,任何人都可以简要总结一下如何开始使用 Visual Studio 和 C++ 实现覆盖图标(服务/DLL/...,要设置的任何编译器选项,显示简单图标所需的最少代码是多少) ?

【问题讨论】:

标签: c++ windows icons overlay explorer


【解决方案1】:

您所指的“图标”是资源管理器进程中显示的图标。这意味着您是另一个流程的客人,您必须按照他们的规则行事。

如果您理解这一点,就很清楚为什么您的代码无法在服务中运行。服务不是 Explorer 进程。

如果您理解这一点,就很清楚为什么必须提供DllRegisterServer()。 Explorer 调用它。

C++ 编译器不知道 Explorer.EXE 的特定规则。但是,您可以通过包含定义它的头文件来告诉编译器IShellIconOverlayIdentifier。这将告诉编译器它实际上是一个 COM 接口。

您可能应该先从简单的 COM 示例开始,然后再尝试向您无法控制的另一个进程提供图标这样复杂的事情。无法在调试模式下编译 Explorer.EXE,所以你只能看到一半的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    相关资源
    最近更新 更多