From af3bff4b9f3da43fd14644eaf1e4885c5f196c2b Mon Sep 17 00:00:00 2001 From: Amrsatrio Date: Sun, 22 Oct 2023 16:37:02 +0700 Subject: [PATCH 1/2] Update README.md --- CHANGELOG.md | 6 +++--- README.md | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1cdc27e..3836c26 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -15,10 +15,10 @@ Note: After updating to this version, the symbols will be re-downloaded even if * Taskbar10: Fixed Control Center and Toast Center positioning on build 25951 (Canary). (dca0b3a) * Taskbar10: Fixed start menu position when the taskbar is at the left or right side on Moment 4 builds. (a57471f) * Taskbar10: Fixed the Windows 10 taskbar background patch to not crash anymore on build 25951 (Canary). (b52bd79) -* Taskbar10: Made taskbar fonts (when using classic theme mitigations) more accurate (thanks @aubymori). (8fc53a1) -* Start10: Fixed a bug where certain texts in the Windows 10 Start menu stayed in English. (c6a7d3f, ed251e9) +* Taskbar10: Made classic theme taskbar fonts more accurate. Thanks @aubymori! (8fc53a1) +* Start10: Fixed a bug where certain texts in the Windows 10 Start menu stayed in English. (655e62c, 5321766) * Start10: Properly fixed start menu showing/hiding along with its original animations on builds 22000.65+. (7e2f768) -* GUI: Fixed a bug where "Remember last used section" doesn't remember the current page after being enabled. (dcf72bb) +* GUI: Fixed a bug where "Remember last used section" doesn't remember the current page after being enabled. (11160c8) * Symbols: Reworked how symbols are managed so that symbols don't need to be successfully downloaded in succession. (8412bd6) ## 22621.2361.58 diff --git a/README.md b/README.md index 1baeb03..36d42b5 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@ # ExplorerPatcher + +[![Join on Discord](https://discordapp.com/api/guilds/1155912047897350204/widget.png?style=shield)](https://discord.gg/gsPcfqHTD2) + This project aims to enhance the working environment on Windows. PayPal donations: [here](https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher¤cy_code=EUR) or using e-mail address valentingabrielradu@gmail.com -Discord server: [here](https://discord.gg/gsPcfqHTD2) - [Read more](https://github.com/valinet/ExplorerPatcher/wiki) From bdc06de667b2ef774df6e94896159676193f4461 Mon Sep 17 00:00:00 2001 From: Amrsatrio Date: Tue, 24 Oct 2023 20:49:28 +0700 Subject: [PATCH 2/2] Taskbar10: Don't register the Win+X window more than once (thanks @roflcopter4) --- ExplorerPatcher/dllmain.c | 98 ++++++++++++++++++++++++--------------- ExplorerPatcher/utility.h | 4 +- 2 files changed, 62 insertions(+), 40 deletions(-) diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index 41af42f..48b2a5d 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -1247,29 +1247,32 @@ DWORD ShowLauncherTipContextMenu( offset_in_class = 8; } - WNDCLASS wc = { 0 }; - wc.style = CS_DBLCLKS; - wc.lpfnWndProc = CLauncherTipContextMenu_WndProc; - wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); - wc.hInstance = GetModuleHandle(NULL); - wc.lpszClassName = LAUNCHERTIP_CLASS_NAME; - wc.hCursor = LoadCursorW(NULL, IDC_ARROW); - RegisterClass(&wc); + static ATOM windowRegistrationAtom = 0; + if (windowRegistrationAtom == 0) + { + WNDCLASS wc = { + .style = CS_DBLCLKS, + .lpfnWndProc = CLauncherTipContextMenu_WndProc, + .hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH), + .hInstance = GetModuleHandleW(NULL), + .lpszClassName = LAUNCHERTIP_CLASS_NAME, + .hCursor = LoadCursorW(NULL, IDC_ARROW) + }; + ATOM atom = RegisterClassW(&wc); + if (atom) + windowRegistrationAtom = atom; + } hWinXWnd = CreateWindowInBand( 0, - LAUNCHERTIP_CLASS_NAME, + MAKEINTATOM(windowRegistrationAtom), 0, WS_POPUP, - 0, - 0, - 0, - 0, - 0, - 0, + 0, 0, 0, 0, + NULL, NULL, GetModuleHandle(NULL), (char*)params->_this - 0x58, - 7 + 7 // ZBID_IMMERSIVE_EDGY ); // DO NOT USE ShowWindow here; it breaks the window order // and renders the desktop toggle unusable; but leave @@ -10689,8 +10692,25 @@ static struct int startExperienceManager_bMaybeFullScreenMode; } g_SMAnimationPatchOffsets; -enum EDGEUI_TRAYSTUCKPLACE {}; -enum DWMTRANSITION_TARGET {}; +// Names are custom +enum EDGEUI_TRAYSTUCKPLACE +{ + TSP_LEFT, + TSP_TOP, + TSP_RIGHT, + TSP_BOTTOM, +}; + +// Names taken from Windows.UI.Xaml.pdb, only defining the used ones +enum DWMTRANSITION_TARGET +{ + DWMTARGET_LAUNCHERFLYOUTTOLEFT = 0x4D, + DWMTARGET_LAUNCHERFLYOUTTORIGHT = 0x4E, + DWMTARGET_LAUNCHERFLYOUTTOTOP = 0x4F, + DWMTARGET_LAUNCHERFLYOUTTOBOTTOM = 0x50, + DWMTARGET_LAUNCHERFLYOUT = 0x51, + DWMTARGET_LAUNCHERFULLSCREEN = 0x52, +}; HRESULT(*CStartExperienceManager_GetMonitorInformationFunc)(void* _this, void* experience, RECT* a3, enum EDGEUI_TRAYSTUCKPLACE* pTsp, bool* a5, RECT* a6, HMONITOR* a7); HRESULT(*CExperienceManagerAnimationHelper_BeginFunc)(void* _this, void*, enum DWMTRANSITION_TARGET, const RECT*, const RECT*, const RECT*, const RECT*, const RECT*); @@ -10713,17 +10733,17 @@ HRESULT OnViewCloakingHook(void* eventHandler, void* experience) if (FAILED(hr)) return hr; - enum DWMTRANSITION_TARGET target = 0x51; + enum DWMTRANSITION_TARGET target = DWMTARGET_LAUNCHERFLYOUT; if (*(bool*)((PBYTE)experience + 0x34)) - target = 0x52; - else if (tsp == 0) - target = 0x4D; - else if (tsp == 1) - target = 0x4F; - else if (tsp == 2) - target = 0x4E; - else if (tsp == 3) - target = 0x50; + target = DWMTARGET_LAUNCHERFULLSCREEN; + else if (tsp == TSP_LEFT) + target = DWMTARGET_LAUNCHERFLYOUTTOLEFT; + else if (tsp == TSP_TOP) + target = DWMTARGET_LAUNCHERFLYOUTTOTOP; + else if (tsp == TSP_RIGHT) + target = DWMTARGET_LAUNCHERFLYOUTTORIGHT; + else if (tsp == TSP_BOTTOM) + target = DWMTARGET_LAUNCHERFLYOUTTOBOTTOM; hr = CExperienceManagerAnimationHelper_BeginFunc( _this + g_SMAnimationPatchOffsets.startExperienceManager_closingAnimation, @@ -10741,17 +10761,19 @@ HRESULT CStartExperienceManager_GetMonitorInformationHook(void* _this, void* exp if (SUCCEEDED(hr) && *(PBYTE)_ReturnAddress() == 0x85 && *((PBYTE)_ReturnAddress() + 1) == 0xC0 && *((PBYTE)_ReturnAddress() + 2) == 0x78) { experience = (PBYTE)_this + g_SMAnimationPatchOffsets.startExperienceManager_singleViewShellExperience; - enum DWMTRANSITION_TARGET target = 0x51; + + enum DWMTRANSITION_TARGET target = DWMTARGET_LAUNCHERFLYOUT; if (*(bool*)((PBYTE)experience + 0x34)) - target = 0x52; - else if (*pTsp == 0) - target = 0x4E; - else if (*pTsp == 1) - target = 0x50; - else if (*pTsp == 2) - target = 0x4D; - else if (*pTsp == 3) - target = 0x4F; + target = DWMTARGET_LAUNCHERFULLSCREEN; + else if (*pTsp == TSP_LEFT) + target = DWMTARGET_LAUNCHERFLYOUTTORIGHT; + else if (*pTsp == TSP_TOP) + target = DWMTARGET_LAUNCHERFLYOUTTOBOTTOM; + else if (*pTsp == TSP_RIGHT) + target = DWMTARGET_LAUNCHERFLYOUTTOLEFT; + else if (*pTsp == TSP_BOTTOM) + target = DWMTARGET_LAUNCHERFLYOUTTOTOP; + CExperienceManagerAnimationHelper_BeginFunc( (PBYTE)_this + g_SMAnimationPatchOffsets.startExperienceManager_openingAnimation, *(void**)((PBYTE)experience + 0x18), // viewWrapper diff --git a/ExplorerPatcher/utility.h b/ExplorerPatcher/utility.h index 38c29bb..095187a 100644 --- a/ExplorerPatcher/utility.h +++ b/ExplorerPatcher/utility.h @@ -345,7 +345,7 @@ inline LSTATUS SHRegGetValueFromHKCUHKLMWithOpt( static HWND(WINAPI* CreateWindowInBand)( _In_ DWORD dwExStyle, - _In_opt_ ATOM atom, + _In_opt_ LPCWSTR lpClassName, _In_opt_ LPCWSTR lpWindowName, _In_ DWORD dwStyle, _In_ int X, @@ -357,7 +357,7 @@ static HWND(WINAPI* CreateWindowInBand)( _In_opt_ HINSTANCE hInstance, _In_opt_ LPVOID lpParam, DWORD band - ); +); BOOL(WINAPI* GetWindowBand)(HWND hWnd, PDWORD pdwBand);