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

2
ExplorerPatcher/settings.reg

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

2
ExplorerPatcher/settings10.reg

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

Loading…
Cancel
Save