none
如何获取桌面所有图标的名称 RRS feed

  • 问题

  • 我想枚举桌面上所有图标的名称,我试过用  IShellFolder::EnumObjects 方法去枚举桌面文件夹,但是它是把所有桌面文件夹下有的都列举出来,而不是列举出真正显示的。

    比如,我通过桌标设置让“此电脑”不显示,但是这个方法枚举出来还是有的。

    大家有什么好的方法提出来,谢谢!

    2019年11月19日 3:00

答案

全部回复

  • 你这是绕过营业员去翻仓库……

    获得桌面图标应该用IFolderView::Items,参考https://devblogs.microsoft.com/oldnewthing/20130318-00/?p=4933



    Visual C++ MVP

    • 已标记为答案 jimmy_q 2019年11月21日 7:14
    2019年11月19日 5:15
    版主
  • 这部分代码在Vista以上适用,对于xp下就不行了。
    spShellWindows->FindWindowSW(
    
         &vtLoc, &vtEmpty,
    
         SWC_DESKTOP, &lhwnd, SWFO_NEEDDISPATCH, &spdisp);


    • 已编辑 jimmy_q 2019年11月19日 6:28
    2019年11月19日 6:27
  • XP不支持这个接口,不过XP的桌面窗口是支持WM_GETISHELLBROWSER的,你可以通过这个消息获得IShellBrowser再用类似的办法获得IFolderView。如果你不能往资源管理器注入DLL的话也可以往XP的桌面窗口下的列表窗口发LVM_GETNEXTITEM。这个列表窗口在桌面下的位置会变化(比如你启用了桌面壁纸轮换的话,就要到WorkerW而不是SHELLDLL_DefView下面去找SysListView32)。LVM_GETNEXTITEM返回的LVITEM的lParam就是PIDL了。之后用IShellFolder::GetDisplayNameOf获取名字。


    Visual C++ MVP

    2019年11月19日 15:41
    版主