哪个 OneDrive 图标/状态对应哪个图标覆盖标识符名称?

Bei*_*ive 5 windows icons overlay onedrive

这个问题类似,我想有选择地禁用某些 OneDrive 的 shell 图标覆盖。然而,注册表(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers)仅列出:OneDrive1、OneDrive2、OneDrive3、OneDrive4、OneDrive5。其中每一项的含义是什么?

Bei*_*ive 4

经过一番摸索后,结果如下:

  1. 未同步(红色 x)
  2. 已同步 - 共享
  3. 同步 - 共享
  4. 已同步
  5. 正在同步

出于好奇,注册表有上述每个键的 CLSID。然后,您可以加载该 COM 对象并询问图标所在的位置(文件加图像编号)。然后您可以查看文件以确定图标(例如使用 Nirsoft 的 IconsExtract)。以下是 VS2013 项目的一些示例代码:

    #include "stdafx.h"
    #include <Shlobj.h>
    #include <iostream> 
    #include <tchar.h>

    int _tmain(int argc, _TCHAR* argv[]){
      LPCOLESTR str_clsid = L"{FB314EE0-A251-47B7-93E1-CDD82E34AF8B}";
      HRESULT hr;
      CLSID clsid;
      IShellIconOverlayIdentifier* pISIOI;
      DWORD dwFlags;
      int Index;
      wchar_t* wszIconFile = new wchar_t[128];

      hr = CLSIDFromString(str_clsid, (LPCLSID)&clsid);
      CoInitialize(NULL);
      hr = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IShellIconOverlayIdentifier, (void**)&pISIOI);
      hr = pISIOI->GetOverlayInfo(wszIconFile, 128, &Index, &dwFlags);
      std::wcout << L"Icon Path:\n    " << wszIconFile << L" " << Index << std::endl;
      pISIOI->Release();
      CoUninitialize();
      return 0;
    }
Run Code Online (Sandbox Code Playgroud)