diff --git a/ExplorerPatcher-L10N b/ExplorerPatcher-L10N index 1ba2543..c6bdc68 160000 --- a/ExplorerPatcher-L10N +++ b/ExplorerPatcher-L10N @@ -1 +1 @@ -Subproject commit 1ba2543f819ea94cefea48105631414da4de57f7 +Subproject commit c6bdc68de7242c189d40ba90c67b97fc9e33f3ad diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index e4cd657..d635ab5 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -9932,9 +9932,48 @@ const WCHAR* GetTaskbarDllChecked(symbols_addr* symbols_PTRS) // - Windows 11: Load our taskbar DLL with LOAD_LIBRARY_AS_DATAFILE for the old context menu // - Windows 10: Skip loading // - Windows 10 (ExplorerPatcher): Load it fully +typedef enum _EP_TASKBAR_FEATURES +{ + EPTF_None, + EPTF_Taskbar = 0x1, + EPTF_ClassicContextMenu = 0x2, + EPTF_WinBlueLauncher = 0x4, + + EPTF_FullLoad = EPTF_Taskbar | EPTF_WinBlueLauncher +} EP_TASKBAR_FEATURES; + +EP_TASKBAR_FEATURES GetEPTaskbarFeatures() +{ + EP_TASKBAR_FEATURES eptf = EPTF_None; + + if (IsWindows11() && bOldTaskbar == 0) + { + eptf |= EPTF_ClassicContextMenu; + } + if (bOldTaskbar >= 2) + { + eptf |= EPTF_Taskbar; + } + + BOOL fValue = FALSE; + BOOL fUseImmersiveLauncher = SUCCEEDED(SHRegGetBOOLWithREGSAM(HKEY_CURRENT_USER, L"Software\\ExplorerPatcher", L"UseImmersiveLauncher", 0, &fValue)) && fValue; + if (fUseImmersiveLauncher) + { + eptf |= EPTF_WinBlueLauncher; + } + + return eptf; +} + HMODULE PrepareAlternateTaskbarImplementation(symbols_addr* symbols_PTRS, const WCHAR* pszTaskbarDll) { - if (bOldTaskbar == 1 || !symbols_PTRS || !pszTaskbarDll) + if (!symbols_PTRS || !pszTaskbarDll) + { + return NULL; + } + + EP_TASKBAR_FEATURES eptf = GetEPTaskbarFeatures(); + if (eptf == EPTF_None) { return NULL; } @@ -9944,7 +9983,8 @@ HMODULE PrepareAlternateTaskbarImplementation(symbols_addr* symbols_PTRS, const SHGetFolderPathW(NULL, SPECIAL_FOLDER, NULL, SHGFP_TYPE_CURRENT, szPath); wcscat_s(szPath, MAX_PATH, _T(APP_RELATIVE_PATH) L"\\"); wcscat_s(szPath, MAX_PATH, pszTaskbarDll); - HMODULE hMyTaskbar = bOldTaskbar >= 2 ? LoadLibraryW(szPath) : LoadLibraryExW(szPath, NULL, LOAD_LIBRARY_AS_DATAFILE); + BOOL bFullLoad = (eptf & EPTF_FullLoad) != 0; + HMODULE hMyTaskbar = bFullLoad ? LoadLibraryW(szPath) : LoadLibraryExW(szPath, NULL, LOAD_LIBRARY_AS_DATAFILE); if (!hMyTaskbar) { wprintf(L"[TB] '%s' not found\n", pszTaskbarDll); @@ -9952,9 +9992,9 @@ HMODULE PrepareAlternateTaskbarImplementation(symbols_addr* symbols_PTRS, const } g_hMyTaskbar = hMyTaskbar; - if (!bOldTaskbar) + if (!bFullLoad) { - return NULL; + return NULL; // Prevent IAT hooks from being carried out } typedef DWORD (*GetVersion_t)(); @@ -9967,24 +10007,44 @@ HMODULE PrepareAlternateTaskbarImplementation(symbols_addr* symbols_PTRS, const return NULL; } - TrayUI_CreateInstance_t pfnMyTrayUICreateInstance = (TrayUI_CreateInstance_t)GetProcAddress(hMyTaskbar, "EP_TrayUI_CreateInstance"); - if (IsWindows11()) - { - explorer_TrayUI_CreateInstanceFunc = pfnMyTrayUICreateInstance; - } - else if (explorer_TrayUI_CreateInstanceFunc) + if ((eptf & EPTF_Taskbar) != 0) { - funchook_prepare( - funchook, - (void**)&explorer_TrayUI_CreateInstanceFunc, - pfnMyTrayUICreateInstance - ); + TrayUI_CreateInstance_t pfnMyTrayUICreateInstance = (TrayUI_CreateInstance_t)GetProcAddress(hMyTaskbar, "EP_TrayUI_CreateInstance"); + if (pfnMyTrayUICreateInstance) + { + if (IsWindows11()) + { + explorer_TrayUI_CreateInstanceFunc = pfnMyTrayUICreateInstance; + } + else if (explorer_TrayUI_CreateInstanceFunc) + { + funchook_prepare( + funchook, + (void**)&explorer_TrayUI_CreateInstanceFunc, + pfnMyTrayUICreateInstance + ); + } + else + { + printf("[TB] Failed to hook TrayUI_CreateInstance()\n"); + FreeLibrary(hMyTaskbar); + return NULL; + } + } } - else + + if ((eptf & EPTF_WinBlueLauncher) != 0) { - printf("[TB] Failed to hook TrayUI_CreateInstance()\n"); - FreeLibrary(hMyTaskbar); - return NULL; + typedef HRESULT (WINAPI *EP_Launcher_PatchTwinUIPCShell_t)(); + EP_Launcher_PatchTwinUIPCShell_t pfnEP_Launcher_PatchTwinUIPCShell = (EP_Launcher_PatchTwinUIPCShell_t)GetProcAddress(hMyTaskbar, "EP_Launcher_PatchTwinUIPCShell"); + if (pfnEP_Launcher_PatchTwinUIPCShell) + { + HRESULT hr = pfnEP_Launcher_PatchTwinUIPCShell(); + if (FAILED(hr)) + { + printf("[TB] Failed to perform immersive shell component patches\n"); + } + } } typedef void (*CopyExplorerSymbols_t)(symbols_addr* symbols); diff --git a/ep_setup/ep_setup.c b/ep_setup/ep_setup.c index 0368a79..dbe60ad 100644 --- a/ep_setup/ep_setup.c +++ b/ep_setup/ep_setup.c @@ -13,7 +13,7 @@ processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"") #ifdef WITH_ENCRYPTION #include "rijndael-alg-fst.c" // Include the C file for __forceinline to work #endif -#pragma comment(lib, "zlibstatic.lib") +#pragma comment(lib, "zs.lib") static UINT g_uFailureLine; diff --git a/libs/sws b/libs/sws index eea1e2a..23fd4e6 160000 --- a/libs/sws +++ b/libs/sws @@ -1 +1 @@ -Subproject commit eea1e2a94c5c22c016c0cae8c0f7cfa8d48a121d +Subproject commit 23fd4e6964b4cc78b99df825a08b252f0c0b3e57 diff --git a/libs/zlib b/libs/zlib index ceadaf2..5a82f71 160000 --- a/libs/zlib +++ b/libs/zlib @@ -1 +1 @@ -Subproject commit ceadaf28dfa48dbf238a0ddb884d4c543b4170e8 +Subproject commit 5a82f71ed1dfc0bec044d9702463dbdf84ea3b71