如同这个问题,我想有选择地禁用一些 OneDrive 的外壳图标覆盖。但是注册表 (HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers) 只列出:OneDrive1、OneDrive2、OneDrive3、OneDrive4、OneDrive5。这些分别是什么意思?
答案1
经过一番探索后,结果如下:
- 未同步(红色 x)
- 已同步 - 共享
- 同步 - 共享
- 已同步
- 同步
好奇的话,注册表中含有上述每个键的 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;
}
答案2
以下是更新内容(描述取自注册表编辑器中的 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 类
有更多经验/知识的人可以证实或纠正这一点吗?