Browse Source

File Explorer: Classic drive groupings do not require a restart

pull/1197/head
Valentin Radu 4 years ago
parent
commit
cd96a949e8
  1. 13
      ExplorerPatcher/dllmain.c
  2. 2
      ExplorerPatcher/settings.reg
  3. 2
      ExplorerPatcher/settings10.reg

13
ExplorerPatcher/dllmain.c

@ -7942,7 +7942,7 @@ HINSTANCE explorer_ShellExecuteW( @@ -7942,7 +7942,7 @@ HINSTANCE explorer_ShellExecuteW(
#pragma region "Classic Drive Grouping"
#ifdef _WIN64
const struct { DWORD dwDescriptionId; UINT uResourceId; } driveCategoryMap[] = {
{ SHDID_FS_DIRECTORY, 9338 }, //shell32
{ SHDID_COMPUTER_SHAREDDOCS, 9338 }, //shell32
@ -8168,7 +8168,7 @@ HRESULT(STDMETHODCALLTYPE *shell32_DriveTypeCategorizer_CreateInstanceFunc)(IUnk @@ -8168,7 +8168,7 @@ HRESULT(STDMETHODCALLTYPE *shell32_DriveTypeCategorizer_CreateInstanceFunc)(IUnk
HRESULT shell32_DriveTypeCategorizer_CreateInstanceHook(IUnknown* pUnkOuter, REFIID riid, void** ppvObject)
{
if (IsEqualIID(riid, &IID_ICategorizer))
if (bUseClassicDriveGrouping && IsEqualIID(riid, &IID_ICategorizer))
{
EPCategorizer* epCategorizer = (EPCategorizer*) malloc(sizeof(EPCategorizer));
epCategorizer->categorizer = &EPCategorizer_categorizerVtbl;
@ -8200,6 +8200,7 @@ HRESULT ExplorerFrame_CoCreateInstanceHook(REFCLSID rclsid, LPUNKNOWN pUnkOuter, @@ -8200,6 +8200,7 @@ HRESULT ExplorerFrame_CoCreateInstanceHook(REFCLSID rclsid, LPUNKNOWN pUnkOuter,
}
return CoCreateInstance(rclsid, pUnkOuter, dwClsContext, riid, ppv);
}
#endif
#pragma endregion
@ -9830,6 +9831,7 @@ DWORD Inject(BOOL bIsExplorer) @@ -9830,6 +9831,7 @@ DWORD Inject(BOOL bIsExplorer)
hShell32 = GetModuleHandleW(L"shell32.dll");
if (hShell32)
{
// Patch ribbon to handle redirects to classic CPLs
HRESULT(*SHELL32_Create_IEnumUICommand)(IUnknown*, int*, int, IUnknown**) = GetProcAddress(hShell32, (LPCSTR)0x2E8);
if (SHELL32_Create_IEnumUICommand)
{
@ -9862,13 +9864,11 @@ DWORD Inject(BOOL bIsExplorer) @@ -9862,13 +9864,11 @@ DWORD Inject(BOOL bIsExplorer)
}
}
if (bUseClassicDriveGrouping)
{
// Allow clasic drive groupings in This PC
HRESULT(*SHELL32_DllGetClassObject)(REFCLSID rclsid, REFIID riid, LPVOID* ppv) = GetProcAddress(hShell32, "DllGetClassObject");
if (SHELL32_DllGetClassObject)
{
IClassFactory* pClassFactory;
IClassFactory* pClassFactory = NULL;
SHELL32_DllGetClassObject(&CLSID_DriveTypeCategorizer, &IID_IClassFactory, &pClassFactory);
if (pClassFactory)
@ -9893,7 +9893,6 @@ DWORD Inject(BOOL bIsExplorer) @@ -9893,7 +9893,6 @@ DWORD Inject(BOOL bIsExplorer)
}
}
}
}
printf("Setup shell32 functions done\n");

2
ExplorerPatcher/settings.reg

@ -162,7 +162,7 @@ @@ -162,7 +162,7 @@
;d Disable the Windows 11 context menu *
@=""
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;b Use classic drive groupings in This PC *
;b Use classic drive groupings in This PC
"UseClassicDriveGrouping"=dword:00000000
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;c 3 Control Interface *

2
ExplorerPatcher/settings10.reg

@ -145,7 +145,7 @@ @@ -145,7 +145,7 @@
;b Register as shell extension
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;b Use classic drive groupings in This PC *
;b Use classic drive groupings in This PC
"UseClassicDriveGrouping"=dword:00000000
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
;c 2 Control Interface

Loading…
Cancel
Save