diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index d337959..9864492 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -9279,6 +9279,32 @@ BOOL shell32_TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y, int nReserve #pragma endregion +#pragma region "Fix Windows 10 taskbar high DPI button width bug" +#ifdef _WIN64 +int patched_GetSystemMetrics(int nIndex) +{ + if ((bOldTaskbar && nIndex == SM_CXMINIMIZED) || nIndex == SM_CXICONSPACING || nIndex == SM_CYICONSPACING) + { + wchar_t wszDim[MAX_PATH + 4]; + ZeroMemory(wszDim, sizeof(wchar_t) * (MAX_PATH + 4)); + DWORD dwSize = MAX_PATH; + wchar_t* pVal = L"MinWidth"; + if (nIndex == SM_CXICONSPACING) pVal = L"IconSpacing"; + else if (nIndex == SM_CYICONSPACING) pVal = L"IconVerticalSpacing"; + RegGetValueW(HKEY_CURRENT_USER, L"Control Panel\\Desktop\\WindowMetrics", pVal, SRRF_RT_REG_SZ, NULL, wszDim, &dwSize); + int dwDim = _wtoi(wszDim); + if (dwDim <= 0) + { + if (nIndex == SM_CXMINIMIZED) return 160; + else if (dwDim < 0) return MulDiv(dwDim, GetDpiForSystem(), -1440); + } + } + return GetSystemMetrics(nIndex); +} +#endif +#pragma endregion + + DWORD InjectBasicFunctions(BOOL bIsExplorer, BOOL bInstall) { //Sleep(150); @@ -9843,6 +9869,11 @@ DWORD Inject(BOOL bIsExplorer) VnPatchIAT(hExplorer, "uxtheme.dll", "OpenThemeDataForDpi", explorer_OpenThemeDataForDpi); VnPatchIAT(hExplorer, "uxtheme.dll", "DrawThemeBackground", explorer_DrawThemeBackground); VnPatchIAT(hExplorer, "uxtheme.dll", "CloseThemeData", explorer_CloseThemeData); + // Fix Windows 10 taskbar high DPI button width bug + if (IsWindows11()) + { + VnPatchIAT(hExplorer, "api-ms-win-ntuser-sysparams-l1-1-0.dll", "GetSystemMetrics", patched_GetSystemMetrics); + } //VnPatchIAT(hExplorer, "api-ms-win-core-libraryloader-l1-2-0.dll", "LoadStringW", explorer_LoadStringWHook); if (bClassicThemeMitigations) { @@ -10167,6 +10198,12 @@ DWORD Inject(BOOL bIsExplorer) VnPatchIAT(hShell32, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegSetValueExW", shell32_RegSetValueExW); VnPatchIAT(hShell32, "user32.dll", "DeleteMenu", shell32_DeleteMenu); } + + // Fix high DPI wrong (desktop) icon spacing bug + if (IsWindows11()) + { + VnPatchIAT(hShell32, "user32.dll", "GetSystemMetrics", patched_GetSystemMetrics); + } } printf("Setup shell32 functions done\n");