web-dev-qa-db-ja.com

どのOneDriveアイコン/ステータスがどのアイコンオーバーレイ識別子名に対応していますか?

この質問 と同様に、OneDriveのシェルアイコンオーバーレイの一部を選択的に無効にします。ただし、レジストリ(HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers)には、OneDrive1、OneDrive2、OneDrive3、OneDrive4、OneDrive5のみがリストされています。これらのそれぞれの意味は何ですか?

4
BeingQuisitive

少し突っ込んだ後、結果は次のとおりです。

  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;
    }
4
BeingQuisitive

更新は次のとおりです(説明はレジストリエディターのCLSIDから取得されます)。

  • OneDrive1 –ErrorOverlayHandlerクラス
  • OneDrive2 –SharedOverlayHandlerクラス
  • OneDrive3 –UpToDateCloudOverlayHandlerクラス
  • OneDrive4 –UpToDatePinnedOverlayHandlerクラス
  • OneDrive5 –SyncingOverlayHandlerクラス
  • OneDrive6 –ReadOnlyOverlayHandlerクラス
  • OneDrive7 –UpToDateUnpinnedOverlayHandlerクラス

さらに、レガシーと思われる3つのCLSIDがあります。

  • {1BF42E4C-4AF4-4CFD-A1A0-CF2960B8F63E} –UpToDateOverlayHandler2クラス
  • {7AFDFDDB-F914-11E4-8377-6C3BE50D980C} –ErrorOverlayHandler2クラス
  • {82CA8DE3-01AD-4CEA-9D75-BE4C51810A9E} –SyncingOverlayHandler2クラス

より多くの経験/知識を持つ誰かがこれを確認または修正できますか?

2
bhankerson