From 601f76ad49fc517b33f22ccf476b9f169aa5110b Mon Sep 17 00:00:00 2001 From: Valentin Radu Date: Tue, 28 Dec 2021 19:52:52 +0200 Subject: [PATCH] Delay sws creation until taskbar is initialized --- ExplorerPatcher/dllmain.c | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/ExplorerPatcher/dllmain.c b/ExplorerPatcher/dllmain.c index 38464ec7a..973f792cd 100644 --- a/ExplorerPatcher/dllmain.c +++ b/ExplorerPatcher/dllmain.c @@ -93,6 +93,7 @@ HANDLE hWin11AltTabInitialized = NULL; BYTE* lpShouldDisplayCCButton = NULL; HMONITOR hMonitorList[30]; DWORD dwMonitorCount = 0; +HANDLE hCanStartSws = NULL; int Code = 0; HRESULT InjectStartFromExplorer(); void InvokeClockFlyout(); @@ -1388,6 +1389,7 @@ DWORD FixTaskbarAutohide(DWORD unused) SHAppBarMessage(ABM_SETSTATE, &abd); } } + SetEvent(hCanStartSws); } #endif #pragma endregion @@ -3581,6 +3583,7 @@ DWORD SignalShellReady(DWORD wait) printf(">>> Signal shell ready.\n"); SetEvent(hEvent); } + SetEvent(hCanStartSws); printf("Ended \"Signal shell ready\" thread.\n"); return 0; @@ -3787,11 +3790,12 @@ void sws_ReadSettings(sws_WindowSwitcher* sws) DWORD WindowSwitcher(DWORD unused) { + WaitForSingleObject(hCanStartSws, INFINITE); if (!bOldTaskbar) { WaitForSingleObject(hWin11AltTabInitialized, INFINITE); - Sleep(1000); } + Sleep(1000); while (TRUE) { @@ -6323,18 +6327,16 @@ DWORD Inject(BOOL bIsExplorer) } #ifdef _WIN64 - if (bIsExplorer) - { - hWin11AltTabInitialized = CreateEventW(NULL, FALSE, FALSE, NULL); - CreateThread( - 0, - 0, - WindowSwitcher, - 0, - 0, - 0 - ); - } + hCanStartSws = CreateEventW(NULL, FALSE, FALSE, NULL); + hWin11AltTabInitialized = CreateEventW(NULL, FALSE, FALSE, NULL); + CreateThread( + 0, + 0, + WindowSwitcher, + 0, + 0, + 0 + ); #ifdef USE_PRIVATE_INTERFACES