1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2025-02-25 14:34:50 +01:00

Taskbar10: Say goodbye to the stock 10 taskbar implementation in explorer.exe of 26002+

This commit is contained in:
Amrsatrio 2024-04-25 20:26:36 +07:00
parent 24e019d484
commit e57a6b0aeb
7 changed files with 120 additions and 20 deletions

View File

@ -4189,7 +4189,7 @@ HRESULT stobject_CoCreateInstanceHook(
LPVOID* ppv LPVOID* ppv
) )
{ {
if (global_rovi.dwBuildNumber >= 25000 && IsEqualGUID(rclsid, &CLSID_NetworkTraySSO) && bOldTaskbar) if (global_rovi.dwBuildNumber >= 25236 && IsEqualGUID(rclsid, &CLSID_NetworkTraySSO) && bOldTaskbar)
{ {
wchar_t szPath[MAX_PATH]; wchar_t szPath[MAX_PATH];
ZeroMemory(szPath, sizeof(szPath)); ZeroMemory(szPath, sizeof(szPath));
@ -6555,6 +6555,7 @@ void WINAPI LoadSettings(LPARAM lParam)
if (!bWasOldTaskbarSet) if (!bWasOldTaskbarSet)
{ {
bOldTaskbar = dwTemp; bOldTaskbar = dwTemp;
AdjustTaskbarStyleValue(&bOldTaskbar);
bWasOldTaskbarSet = TRUE; bWasOldTaskbarSet = TRUE;
} }
dwSize = sizeof(DWORD); dwSize = sizeof(DWORD);
@ -9896,6 +9897,7 @@ int RtlQueryFeatureConfigurationHook(UINT32 featureId, int sectionType, INT64* c
} }
break; break;
} }
#if 0
case 42537950: // DisableWin10Taskbar case 42537950: // DisableWin10Taskbar
{ {
if (bOldTaskbar) if (bOldTaskbar)
@ -9905,6 +9907,7 @@ int RtlQueryFeatureConfigurationHook(UINT32 featureId, int sectionType, INT64* c
} }
break; break;
} }
#endif
case 44656322: // ID44656322 case 44656322: // ID44656322
{ {
if (bOldTaskbar) if (bOldTaskbar)
@ -11872,7 +11875,7 @@ LSTATUS pnidui_RegGetValueW(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, DWORD
void PatchPnidui(HMODULE hPnidui) void PatchPnidui(HMODULE hPnidui)
{ {
VnPatchIAT(hPnidui, "api-ms-win-core-com-l1-1-0.dll", "CoCreateInstance", pnidui_CoCreateInstanceHook); VnPatchIAT(hPnidui, "api-ms-win-core-com-l1-1-0.dll", "CoCreateInstance", pnidui_CoCreateInstanceHook);
if (global_rovi.dwBuildNumber >= 25000) if (global_rovi.dwBuildNumber >= 25236)
{ {
VnPatchIAT(hPnidui, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", pnidui_RegGetValueW); VnPatchIAT(hPnidui, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", pnidui_RegGetValueW);
} }
@ -12211,6 +12214,7 @@ DWORD Inject(BOOL bIsExplorer)
if (bOldTaskbar >= 2 && !pszTaskbarDll) if (bOldTaskbar >= 2 && !pszTaskbarDll)
{ {
bOldTaskbar = 1; bOldTaskbar = 1;
AdjustTaskbarStyleValue(&bOldTaskbar);
} }
@ -12238,6 +12242,7 @@ DWORD Inject(BOOL bIsExplorer)
CImmersiveColor_GetColorFunc = (DWORD(*)(int))((uintptr_t)hExplorer + symbols_PTRS.explorer_PTRS[0]); CImmersiveColor_GetColorFunc = (DWORD(*)(int))((uintptr_t)hExplorer + symbols_PTRS.explorer_PTRS[0]);
} }
#if 0
if (global_rovi.dwBuildNumber >= 26002) if (global_rovi.dwBuildNumber >= 26002)
{ {
// Please Microsoft 🙏 // Please Microsoft 🙏
@ -12267,6 +12272,7 @@ DWORD Inject(BOOL bIsExplorer)
); );
} }
} }
#endif
} }
SetChildWindowNoActivateFunc = GetProcAddress(GetModuleHandleW(L"user32.dll"), (LPCSTR)2005); SetChildWindowNoActivateFunc = GetProcAddress(GetModuleHandleW(L"user32.dll"), (LPCSTR)2005);
@ -12664,7 +12670,7 @@ DWORD Inject(BOOL bIsExplorer)
VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenu", stobject_TrackPopupMenuHook); VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenu", stobject_TrackPopupMenuHook);
VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenuEx", stobject_TrackPopupMenuExHook); VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenuEx", stobject_TrackPopupMenuExHook);
} }
if (global_rovi.dwBuildNumber >= 25000 && bOldTaskbar) if (global_rovi.dwBuildNumber >= 25236 && bOldTaskbar)
{ {
PatchStobject(hStobject); PatchStobject(hStobject);
} }
@ -12690,7 +12696,7 @@ DWORD Inject(BOOL bIsExplorer)
if (global_rovi.dwBuildNumber < 25000) if (global_rovi.dwBuildNumber < 25236)
{ {
HANDLE hPnidui = LoadLibraryW(L"pnidui.dll"); HANDLE hPnidui = LoadLibraryW(L"pnidui.dll");
if (hPnidui) if (hPnidui)

View File

@ -1,26 +1,45 @@
#ifndef _H_HOOKING_H_ #ifndef _H_HOOKING_H_
#define _H_HOOKING_H_ #define _H_HOOKING_H_
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP 0 #define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_NOP 0
#define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP 1 #define STRAT_REPLACE_ANY_TYPE_OF_JUMP_WITH_ALWAYS_JUMP 1
#define HOOK_WITH_FUNCHOOK 0 #define HOOK_WITH_FUNCHOOK 0
#define HOOK_WITH_DETOURS 1 #define HOOK_WITH_DETOURS 1
#define HOW_TO_HOOK HOOK_WITH_FUNCHOOK #define HOW_TO_HOOK HOOK_WITH_FUNCHOOK
#if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK #if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK
#ifdef _M_ARM64 #ifdef _M_ARM64
#error Cannot compile for ARM64 using funchook. Change the source to hook with Detours and try again. Compilation aborted. #error Cannot compile for ARM64 using funchook. Change the source to hook with Detours and try again. Compilation aborted.
#endif #endif
#include <funchook.h> #include <funchook.h>
#include <distorm.h> #include <distorm.h>
#pragma comment(lib, "funchook.lib") #pragma comment(lib, "funchook.lib")
#pragma comment(lib, "Psapi.lib") // required by funchook #pragma comment(lib, "Psapi.lib") // required by funchook
#pragma comment(lib, "distorm.lib") #pragma comment(lib, "distorm.lib")
#elif HOW_TO_HOOK == HOOK_WITH_DETOURS #elif HOW_TO_HOOK == HOOK_WITH_DETOURS
#ifdef __cplusplus
extern "C"
{
#endif
#include <detours.h> #include <detours.h>
#pragma comment(lib, "detours.lib") #pragma comment(lib, "detours.lib")
#ifdef __cplusplus
inline
#endif
void* funchook_create(void) void* funchook_create(void)
{ {
return 1; return 1;
} }
#ifdef __cplusplus
inline
#endif
int funchook_uninstall( int funchook_uninstall(
void* _this, void* _this,
int flags int flags
@ -28,10 +47,18 @@ int funchook_uninstall(
{ {
return 0; return 0;
} }
#ifdef __cplusplus
inline
#endif
int funchook_destroy(void* _this) int funchook_destroy(void* _this)
{ {
return 0; return 0;
} }
#ifdef __cplusplus
inline
#endif
int funchook_prepare( int funchook_prepare(
void* funchook, void* funchook,
void** target_func, void** target_func,
@ -43,6 +70,10 @@ int funchook_prepare(
DetourAttach(target_func, hook_func); DetourAttach(target_func, hook_func);
return DetourTransactionCommit(); return DetourTransactionCommit();
} }
#ifdef __cplusplus
inline
#endif
int funchook_install( int funchook_install(
void* funchook, void* funchook,
int flags int flags
@ -50,10 +81,28 @@ int funchook_install(
{ {
return 0; return 0;
} }
#ifdef __cplusplus
} // extern "C"
#endif #endif
#endif
#define HOOKING_SUCCESS 0
#ifdef __cplusplus
extern "C"
{
#endif
#if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK #if HOW_TO_HOOK == HOOK_WITH_FUNCHOOK
funchook_t* funchook = 0; funchook_t* funchook;
#elif HOW_TO_HOOK == HOOK_WITH_DETOURS #elif HOW_TO_HOOK == HOOK_WITH_DETOURS
void* funchook = 0; void* funchook;
#endif #endif
#ifdef __cplusplus
} // extern "C"
#endif
#endif #endif

View File

@ -102,6 +102,9 @@ DEFINE_GUID(IID_ITrayUIComponent,
0x64, 0xb4, 0xc0, 0x9b, 0x21, 0x1b 0x64, 0xb4, 0xc0, 0x9b, 0x21, 0x1b
); );
#ifdef __cplusplus
inline
#endif
HRESULT(*explorer_TrayUI_CreateInstanceFunc)(ITrayUIHost* host, REFIID riid, void** ppv); HRESULT(*explorer_TrayUI_CreateInstanceFunc)(ITrayUIHost* host, REFIID riid, void** ppv);
#pragma endregion #pragma endregion
@ -145,6 +148,9 @@ typedef LSTATUS(*t_SHRegGetValueFromHKCUHKLM)(
void* pvData, void* pvData,
DWORD* pcbData DWORD* pcbData
); );
#ifdef __cplusplus
inline
#endif
t_SHRegGetValueFromHKCUHKLM SHRegGetValueFromHKCUHKLMFunc; t_SHRegGetValueFromHKCUHKLM SHRegGetValueFromHKCUHKLMFunc;
inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt( inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt(
@ -215,6 +221,9 @@ inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt(
return lRes; return lRes;
} }
#ifdef __cplusplus
inline
#endif
HWND(WINAPI* CreateWindowInBand)( HWND(WINAPI* CreateWindowInBand)(
_In_ DWORD dwExStyle, _In_ DWORD dwExStyle,
_In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpClassName,
@ -231,10 +240,19 @@ HWND(WINAPI* CreateWindowInBand)(
DWORD band DWORD band
); );
#ifdef __cplusplus
inline
#endif
BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand); BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);
#ifdef __cplusplus
inline
#endif
BOOL(WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand); BOOL(WINAPI* SetWindowBand)(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand);
#ifdef __cplusplus
inline
#endif
INT64(*SetWindowCompositionAttribute)(HWND, void*); INT64(*SetWindowCompositionAttribute)(HWND, void*);
static void(*SetPreferredAppMode)(BOOL bAllowDark); static void(*SetPreferredAppMode)(BOOL bAllowDark);
@ -672,6 +690,11 @@ inline BOOL DoesWindows10StartMenuExist()
return FileExistsW(szPath); return FileExistsW(szPath);
} }
inline BOOL IsStockWindows10TaskbarAvailable()
{
return global_rovi.dwBuildNumber < 26002;
}
#if WITH_ALT_TASKBAR_IMPL #if WITH_ALT_TASKBAR_IMPL
inline const WCHAR* PickTaskbarDll() inline const WCHAR* PickTaskbarDll()
{ {
@ -721,6 +744,18 @@ inline BOOL DoesTaskbarDllExist()
} }
#endif #endif
inline void AdjustTaskbarStyleValue(DWORD* pdwValue)
{
if (*pdwValue >= 2 && !DoesTaskbarDllExist())
{
*pdwValue = 1;
}
if (*pdwValue == 1 && !IsStockWindows10TaskbarAvailable())
{
*pdwValue = 0;
}
}
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif #endif

View File

@ -12,7 +12,7 @@ DWORD GUI_FileSize = 0;
BOOL g_darkModeEnabled = FALSE; BOOL g_darkModeEnabled = FALSE;
static void(*RefreshImmersiveColorPolicyState)() = NULL; static void(*RefreshImmersiveColorPolicyState)() = NULL;
DWORD dwTaskbarPosition = 3; DWORD dwTaskbarPosition = 3;
BOOL gui_bOldTaskbar = TRUE; DWORD GUI_TaskbarStyle = 1;
LSTATUS SetPolicy(HKEY hKey, LPCWSTR wszPolicyPath, LPCWSTR wszPolicyName, DWORD dwVal) LSTATUS SetPolicy(HKEY hKey, LPCWSTR wszPolicyPath, LPCWSTR wszPolicyName, DWORD dwVal)
{ {
@ -632,7 +632,7 @@ LSTATUS GUI_Internal_RegQueryValueExW(
if (pcbData == sizeof(StuckRectsData) && srd.pvData[0] == sizeof(StuckRectsData) && srd.pvData[1] == -2) if (pcbData == sizeof(StuckRectsData) && srd.pvData[0] == sizeof(StuckRectsData) && srd.pvData[1] == -2)
{ {
dwTaskbarPosition = srd.pvData[3]; dwTaskbarPosition = srd.pvData[3];
if (!gui_bOldTaskbar) if (GUI_TaskbarStyle == 0)
{ {
if (srd.pvData[3] != 1 && srd.pvData[3] != 3) // Disallow left/right settings for Windows 11 taskbar, as this breaks it if (srd.pvData[3] != 1 && srd.pvData[3] != 3) // Disallow left/right settings for Windows 11 taskbar, as this breaks it
{ {
@ -672,7 +672,7 @@ LSTATUS GUI_Internal_RegQueryValueExW(
); );
if (pcbData == sizeof(StuckRectsData) && srd.pvData[0] == sizeof(StuckRectsData) && srd.pvData[1] == -2) if (pcbData == sizeof(StuckRectsData) && srd.pvData[0] == sizeof(StuckRectsData) && srd.pvData[1] == -2)
{ {
if (!gui_bOldTaskbar) if (GUI_TaskbarStyle == 0)
{ {
if (srd.pvData[3] != 1 && srd.pvData[3] != 3) // Disallow left/right settings for Windows 11 taskbar, as this breaks it if (srd.pvData[3] != 1 && srd.pvData[3] != 3) // Disallow left/right settings for Windows 11 taskbar, as this breaks it
{ {
@ -1000,14 +1000,14 @@ static void GUI_UpdateLanguages()
EP_L10N_GetCurrentThreadLanguage(wszThreadLanguage, ARRAYSIZE(wszThreadLanguage)); EP_L10N_GetCurrentThreadLanguage(wszThreadLanguage, ARRAYSIZE(wszThreadLanguage));
} }
DWORD GUI_GetTaskbarStyle() DWORD GUI_GetTaskbarStyle(BOOL bAdjust)
{ {
DWORD dwRes = 1; DWORD dwRes = 1;
DWORD dwSize = sizeof(DWORD); DWORD dwSize = sizeof(DWORD);
RegGetValueW(HKEY_CURRENT_USER, _T(REGPATH), L"OldTaskbar", RRF_RT_DWORD, NULL, &dwRes, &dwSize); RegGetValueW(HKEY_CURRENT_USER, _T(REGPATH), L"OldTaskbar", RRF_RT_DWORD, NULL, &dwRes, &dwSize);
if (dwRes >= 2 && !DoesTaskbarDllExist()) if (bAdjust)
{ {
dwRes = 1; AdjustTaskbarStyleValue(&dwRes);
} }
return dwRes; return dwRes;
} }
@ -1161,19 +1161,23 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
if (!_stricmp(funcName, "DoesOSBuildSupportSpotlight") && !DoesOSBuildSupportSpotlight()) bSkipLines = TRUE; if (!_stricmp(funcName, "DoesOSBuildSupportSpotlight") && !DoesOSBuildSupportSpotlight()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsSpotlightEnabled") && !IsSpotlightEnabled()) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsSpotlightEnabled") && !IsSpotlightEnabled()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsSWSEnabled") && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", L"AltTabSettings", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 2))) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsSWSEnabled") && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer", L"AltTabSettings", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 2))) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsOldTaskbar") && GUI_GetTaskbarStyle() == 0) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsOldTaskbar") && GUI_GetTaskbarStyle(TRUE) == 0) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!IsOldTaskbar") && GUI_GetTaskbarStyle() != 0) bSkipLines = TRUE; else if (!_stricmp(funcName, "!IsOldTaskbar") && GUI_GetTaskbarStyle(TRUE) != 0) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsStockWin10Taskbar") && GUI_GetTaskbarStyle() != 1) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsStockWin10Taskbar") && GUI_GetTaskbarStyle(TRUE) != 1) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsAltImplTaskbar") && GUI_GetTaskbarStyle() <= 1) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsAltImplTaskbar") && GUI_GetTaskbarStyle(TRUE) <= 1) bSkipLines = TRUE;
else if (!_stricmp(funcName, "DoesTaskbarDllExist") && !DoesTaskbarDllExist()) bSkipLines = TRUE; else if (!_stricmp(funcName, "DoesTaskbarDllExist") && !DoesTaskbarDllExist()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!DoesTaskbarDllExist") && DoesTaskbarDllExist()) bSkipLines = TRUE; else if (!_stricmp(funcName, "!DoesTaskbarDllExist") && DoesTaskbarDllExist()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!IsStockWindows10TaskbarAvailable") && !(!IsStockWindows10TaskbarAvailable() && GUI_GetTaskbarStyle(FALSE) == 1)) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsWindows10StartMenu") && (!DoesWindows10StartMenuExist() || (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"Start_ShowClassicMode", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 1)))) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsWindows10StartMenu") && (!DoesWindows10StartMenuExist() || (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"Start_ShowClassicMode", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 1)))) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!IsWindows10StartMenu") && (DoesWindows10StartMenuExist() && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"Start_ShowClassicMode", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes == 1)))) bSkipLines = TRUE; else if (!_stricmp(funcName, "!IsWindows10StartMenu") && (DoesWindows10StartMenuExist() && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"Start_ShowClassicMode", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes == 1)))) bSkipLines = TRUE;
else if (!_stricmp(funcName, "DoesWindows10StartMenuExist") && !DoesWindows10StartMenuExist()) bSkipLines = TRUE; else if (!_stricmp(funcName, "DoesWindows10StartMenuExist") && !DoesWindows10StartMenuExist()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsWeatherEnabled") && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\People", L"PeopleBand", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 1))) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsWeatherEnabled") && (dwRes = 0, RegGetValueW(HKEY_CURRENT_USER, L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced\\People", L"PeopleBand", RRF_RT_DWORD, NULL, &dwRes, &dwSize), (dwRes != 1))) bSkipLines = TRUE;
else if (!_stricmp(funcName, "IsWindows11Version22H2OrHigher") && !IsWindows11Version22H2OrHigher()) bSkipLines = TRUE; else if (!_stricmp(funcName, "IsWindows11Version22H2OrHigher") && !IsWindows11Version22H2OrHigher()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!IsWindows11Version22H2OrHigher") && IsWindows11Version22H2OrHigher()) bSkipLines = TRUE; else if (!_stricmp(funcName, "!IsWindows11Version22H2OrHigher") && IsWindows11Version22H2OrHigher()) bSkipLines = TRUE;
else if (!_stricmp(funcName, "!(IsWindows11Version22H2OrHigher&&!IsOldTaskbar)") && (IsWindows11Version22H2OrHigher() && GUI_GetTaskbarStyle() == 0)) bSkipLines = TRUE; else if (!_stricmp(funcName, "!(IsWindows11Version22H2OrHigher&&!IsOldTaskbar)") && (IsWindows11Version22H2OrHigher() && GUI_GetTaskbarStyle(TRUE) == 0)) bSkipLines = TRUE;
#if 1
else if (!_stricmp(funcName, "LogonLogoffShutdownSoundsAvailable")) bSkipLines = TRUE;
#endif
if (bSkipLines) if (bSkipLines)
{ {
do do
@ -2485,7 +2489,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
BOOL bShouldAlterTaskbarDa = FALSE; BOOL bShouldAlterTaskbarDa = FALSE;
if (!wcscmp(name, L"TaskbarDa")) if (!wcscmp(name, L"TaskbarDa"))
{ {
if (!gui_bOldTaskbar) if (GUI_TaskbarStyle == 0)
{ {
MENUITEMINFOA menuInfo; MENUITEMINFOA menuInfo;
ZeroMemory(&menuInfo, sizeof(MENUITEMINFOA)); ZeroMemory(&menuInfo, sizeof(MENUITEMINFOA));
@ -2502,7 +2506,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
} }
if (!wcscmp(name, L"Virtualized_" _T(EP_CLSID) L"_TaskbarPosition") || !wcscmp(name, L"Virtualized_" _T(EP_CLSID) L"_MMTaskbarPosition")) if (!wcscmp(name, L"Virtualized_" _T(EP_CLSID) L"_TaskbarPosition") || !wcscmp(name, L"Virtualized_" _T(EP_CLSID) L"_MMTaskbarPosition"))
{ {
if (!gui_bOldTaskbar) if (GUI_TaskbarStyle == 0)
{ {
MENUITEMINFOA menuInfo; MENUITEMINFOA menuInfo;
ZeroMemory(&menuInfo, sizeof(MENUITEMINFOA)); ZeroMemory(&menuInfo, sizeof(MENUITEMINFOA));
@ -2600,7 +2604,8 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
); );
if (!wcscmp(name, L"OldTaskbar")) if (!wcscmp(name, L"OldTaskbar"))
{ {
gui_bOldTaskbar = value; GUI_TaskbarStyle = value;
AdjustTaskbarStyleValue(&GUI_TaskbarStyle);
} }
if (hDC && bInvert) if (hDC && bInvert)
{ {

View File

@ -50,6 +50,7 @@
#define IDS_TB_ICONSIZE_0 1046 #define IDS_TB_ICONSIZE_0 1046
#define IDS_TB_STYLE_2 1047 #define IDS_TB_STYLE_2 1047
#define IDS_TB_ALTIMPL_NOTICE 1048 #define IDS_TB_ALTIMPL_NOTICE 1048
#define IDS_TB_WIN10_UNAVAILABLE 1049
#define IDS_TRAY 1101 #define IDS_TRAY 1101
#define IDS_TRAY_SKINMENUS 1102 #define IDS_TRAY_SKINMENUS 1102

View File

@ -41,6 +41,7 @@ BEGIN
IDS_TB_STYLE_0 "Windows 11 (default)" IDS_TB_STYLE_0 "Windows 11 (default)"
IDS_TB_STYLE_1 "Windows 10" IDS_TB_STYLE_1 "Windows 10"
IDS_TB_STYLE_2 "Windows 10 (ExplorerPatcher)" IDS_TB_STYLE_2 "Windows 10 (ExplorerPatcher)"
IDS_TB_WIN10_UNAVAILABLE "Windows 10 taskbar is not available in this version of Windows."
IDS_TB_MORE "More taskbar options in the Settings app" IDS_TB_MORE "More taskbar options in the Settings app"
IDS_TB_CUSTOMIZETRAYICONS "Customize notification area icons" IDS_TB_CUSTOMIZETRAYICONS "Customize notification area icons"
IDS_TB_CUSTOMIZESYSTEMICONS "Customize system icons in the notification area" IDS_TB_CUSTOMIZESYSTEMICONS "Customize system icons in the notification area"

View File

@ -20,6 +20,9 @@
;x 1 %R:1004% ;x 1 %R:1004%
"OldTaskbar"=dword:00000001 "OldTaskbar"=dword:00000001
;g Taskbar_StyleSection2 ;g Taskbar_StyleSection2
;s Taskbar_StockWin10Unavailable !IsStockWindows10TaskbarAvailable
;t ⚠ %R:1049%
;g Taskbar_StockWin10Unavailable
;y %R:1005% 🡕 ;y %R:1005% 🡕
;ms-settings:taskbar ;ms-settings:taskbar
;y %R:1006% 🡕 ;y %R:1006% 🡕