【问题标题】:Implement Overlay Icon?实施覆盖图标?
【发布时间】:2010-12-30 16:21:10
【问题描述】:

我在http://www.codeproject.com/KB/shell/overlayicon.aspx 阅读了这篇文章。 我有一些我无法回答的问题。请帮帮我?

  1. 当我将项目构建到 COM dll 时。当我使用其他程序调用这个 dll 时。我可以调用哪种方法在所选文件上显示覆盖图标?我想我会打电话 GetOverlayInfo() 先打电话给IsMemberOf()?只有 2 个函数?
  2. GetOverlayInfo()。我会在第一个参数中传递什么值?覆盖图标的路径?或者文件的路径会在上面设置覆盖图标吗?可以举个例子吗?
  3. 在下面的函数中:

    STDMETHODIMP CMyOverlayIcon::GetOverlayInfo(
        LPWSTR pwszIconFile,
        int cchMax,int* pIndex,
        DWORD* pdwFlags)
    {
     GetModuleFileName(_AtlBaseModule.GetModuleInstance(),pwszIconFile,cchMax);
    
     *pIndex =0;
     *pdwFlags = ISIOI_ICONFILE | ISIOI_ICONINDEX;
    
     return S_OK;
    }
    

你能告诉我当我从外部程序调用它时,我能把什么值传递给函数吗? 你能给我举个例子如何调用它并向它传递价值吗?

  1. pwszIconFile
  2. cchMax
  3. pIndex
  4. pdwFlags(当我从外部调用它时,我可以传递哪个值。前 C# 程序)

【问题讨论】:

  • 你想在哪里显示覆盖图标?在 Windows 资源管理器中?在这种情况下,您不会从应用程序调用 COM dll,它会在需要时自动调用。 COM dll 将注册为 Shell 扩展,Windows 资源管理器将调用它。
  • 我想编写一个应用程序,它会在我右键单击的文件上显示重叠图标。我在codeproject中搜索了链接。现在我想编写另一个应用程序来调用这个 OverlapIcon.dll 来完成我的目标。你能告诉我更多或给我一个样品。非常感谢你
  • 其实我也有同样的问题。在执行某些操作时显示图像。如果您能找到答案,请在此处发布!)谢谢

标签: c++ com mfc


【解决方案1】:
  1. 是的,您只需使用这两个功能即可。但无论如何我都会调用 GetPriority(),即使你不使用返回值。您永远不会知道覆盖处理程序是否依赖于该调用(如果您自己没有编写它)。而且您只需要调用一次 GetOverlayInfo(),但要为每个要为其显示覆盖图标的文件调用 IsMemberOf()。
  2. 您必须传递一个(空)缓冲区,并在 cchMax 中传递缓冲区的长度。 Overlay 处理程序将使用图标文件的路径填充缓冲区。但是您还必须检查 pdwFlags 和 pIndex(两者都由覆盖处理程序填充) - 根据 pdwFlags 中设置的标志,您可以在 pwszIconFile 中获得图标文件的路径,或者获得包含 exe 文件的路径其资源中的图标。如果是后者,那么 pIndex 值就是你要加载的 exe 文件中图标的资源索引。

您没有说明为什么要自己调用覆盖处理程序。如果您只是想在某些列表视图或对话框中显示资源管理器中的图标,您可以使用更简单的路线,您无需阅读注册所有覆盖处理程序的注册表(并且一些系统覆盖'甚至没有在那里注册!)。

看看KB192055,也许这是你需要的更好的方法?

【讨论】:

  • 非常感谢 Stefan。我还有一个问题。你可以帮帮我吗?你能给我一个用 c++(或 C#)编写的示例代码,调用 OverlayIcon.dll 的函数来在文件上显示覆盖图标吗?我正在开发一个程序,该程序具有在所选文件上显示覆盖图标的功能 - 我右键单击它的某个文件。你可以帮帮我吗?我非常感谢你。提前致谢。
  • 只需使用上面链接的 KB192055 中的代码示例。这会做你想做的(只是不要使用“* .lnk”,而是你想要覆盖图标的文件的真正扩展名)。
  • 非常感谢 Stefan,我读了。但是您能否向我解释一下如何调用此函数来启用所选文件上的覆盖图标。你能给我一个样本sn-ps吗?谢谢提前
猜你喜欢
  • 1970-01-01
  • 2018-09-07
  • 2019-08-29
  • 1970-01-01
  • 2017-04-08
  • 1970-01-01
  • 2012-09-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多