mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2025-01-31 03:53:44 +01:00
Added posibility to use the original Windows 10 Alt-Tab switcher
This commit is contained in:
parent
aafd184962
commit
1e4a11b6bc
@ -72,6 +72,7 @@ DWORD bToolbarSeparators = FALSE;
|
||||
DWORD bTaskbarAutohideOnDoubleClick = FALSE;
|
||||
DWORD dwOrbStyle = 0;
|
||||
DWORD bEnableSymbolDownload = TRUE;
|
||||
DWORD dwAltTabSettings = 0;
|
||||
HMODULE hModule = NULL;
|
||||
HANDLE hDelayedInjectionThread = NULL;
|
||||
HANDLE hIsWinXShown = NULL;
|
||||
@ -3845,6 +3846,36 @@ void WINAPI LoadSettings(BOOL bIsExplorer)
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer",
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ | KEY_WOW64_64KEY,
|
||||
NULL,
|
||||
&hKey,
|
||||
NULL
|
||||
);
|
||||
if (hKey == NULL || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
hKey = NULL;
|
||||
}
|
||||
if (hKey)
|
||||
{
|
||||
dwSize = sizeof(DWORD);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT("AltTabSettings"),
|
||||
0,
|
||||
NULL,
|
||||
&dwAltTabSettings,
|
||||
&dwSize
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
}
|
||||
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\StartPage",
|
||||
@ -4920,14 +4951,14 @@ LSTATUS twinuipcshell_RegGetValueW(
|
||||
{
|
||||
LSTATUS lRes = RegGetValueW(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
|
||||
|
||||
if (!bOldTaskbar && !lstrcmpW(lpValue, L"AltTabSettings"))
|
||||
if (!lstrcmpW(lpValue, L"AltTabSettings"))
|
||||
{
|
||||
if (*(DWORD*)pvData)
|
||||
if (lRes == ERROR_SUCCESS && *(DWORD*)pvData)
|
||||
{
|
||||
*(DWORD*)pvData = 1;
|
||||
}
|
||||
|
||||
if (hWin11AltTabInitialized)
|
||||
if (!bOldTaskbar && hWin11AltTabInitialized)
|
||||
{
|
||||
SetEvent(hWin11AltTabInitialized);
|
||||
CloseHandle(hWin11AltTabInitialized);
|
||||
@ -5243,6 +5274,24 @@ DWORD InjectBasicFunctions(BOOL bIsExplorer, BOOL bInstall)
|
||||
}
|
||||
}
|
||||
|
||||
INT64(*twinui_pcshell_IsUndockedAssetAvailableFunc)(INT a1, INT64 a2, INT64 a3, const char* a4);
|
||||
INT64 twinui_pcshell_IsUndockedAssetAvailableHook(INT a1, INT64 a2, INT64 a3, const char* a4)
|
||||
{
|
||||
if (dwAltTabSettings == 3)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
return twinui_pcshell_IsUndockedAssetAvailableFunc(a1, a2, a3, a4);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL IsDebuggerPresentHook()
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD Inject(BOOL bIsExplorer)
|
||||
{
|
||||
#if defined(DEBUG) | defined(_DEBUG)
|
||||
@ -5274,7 +5323,7 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
hSwsOpacityMaybeChanged = CreateEventW(NULL, FALSE, FALSE, NULL);
|
||||
}
|
||||
|
||||
unsigned int numSettings = bIsExplorer ? 11 : 2;
|
||||
unsigned int numSettings = bIsExplorer ? 12 : 2;
|
||||
Setting* settings = calloc(numSettings, sizeof(Setting));
|
||||
if (settings)
|
||||
{
|
||||
@ -5401,6 +5450,17 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
cs++;
|
||||
}
|
||||
|
||||
if (cs < numSettings)
|
||||
{
|
||||
settings[cs].callback = LoadSettings;
|
||||
settings[cs].data = bIsExplorer;
|
||||
settings[cs].hEvent = NULL;
|
||||
settings[cs].hKey = NULL;
|
||||
wcscpy_s(settings[cs].name, MAX_PATH, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer");
|
||||
settings[cs].origin = HKEY_CURRENT_USER;
|
||||
cs++;
|
||||
}
|
||||
|
||||
SettingsChangeParameters* settingsParams = calloc(1, sizeof(SettingsChangeParameters));
|
||||
if (settingsParams)
|
||||
{
|
||||
@ -5641,6 +5701,22 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
}
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[7] && symbols_PTRS.twinui_pcshell_PTRS[7] != 0xFFFFFFFF)
|
||||
{
|
||||
twinui_pcshell_IsUndockedAssetAvailableFunc = (INT64(*)(void*, POINT*))
|
||||
((uintptr_t)hTwinuiPcshell + symbols_PTRS.twinui_pcshell_PTRS[7]);
|
||||
rv = funchook_prepare(
|
||||
funchook,
|
||||
(void**)&twinui_pcshell_IsUndockedAssetAvailableFunc,
|
||||
twinui_pcshell_IsUndockedAssetAvailableHook
|
||||
);
|
||||
if (rv != 0)
|
||||
{
|
||||
FreeLibraryAndExitThread(hModule, rv);
|
||||
return rv;
|
||||
}
|
||||
}
|
||||
|
||||
if (symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] && symbols_PTRS.twinui_pcshell_PTRS[TWINUI_PCSHELL_SB_CNT - 1] != 0xFFFFFFFF)
|
||||
{
|
||||
winrt_Windows_Internal_Shell_implementation_MeetAndChatManager_OnMessageFunc = (INT64(*)(void*, POINT*))
|
||||
@ -5657,6 +5733,7 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
}
|
||||
}
|
||||
VnPatchIAT(hTwinuiPcshell, "API-MS-WIN-CORE-REGISTRY-L1-1-0.DLL", "RegGetValueW", twinuipcshell_RegGetValueW);
|
||||
//VnPatchIAT(hTwinuiPcshell, "api-ms-win-core-debug-l1-1-0.dll", "IsDebuggerPresent", IsDebuggerPresentHook);
|
||||
printf("Setup twinui.pcshell functions done\n");
|
||||
|
||||
|
||||
|
@ -197,12 +197,13 @@
|
||||
|
||||
;T Window switcher
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
|
||||
;z 3 Window switcher (Alt+Tab) style *
|
||||
;x 0 Windows 11
|
||||
;x 2 Windows 10
|
||||
;z 4 Window switcher (Alt+Tab) style *
|
||||
;x 0 Windows 11 (default)
|
||||
;x 3 Windows 10
|
||||
;x 1 Windows NT
|
||||
;x 2 Simple Window Switcher
|
||||
"AltTabSettings"=dword:00000000
|
||||
;t The following settings only apply to the Windows 10 window switcher:
|
||||
;t The following settings only apply to the Simple Window Switcher:
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher\sws]
|
||||
;b Include desktop
|
||||
"IncludeWallpaper"=dword:00000001
|
||||
|
@ -237,7 +237,7 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
DWORD dwZero = 0;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(TWINUI_PCSHELL_SB_7),
|
||||
TEXT(TWINUI_PCSHELL_SB_8),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwZero,
|
||||
@ -325,6 +325,14 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
&(symbols_PTRS.twinui_pcshell_PTRS[7]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(TWINUI_PCSHELL_SB_8),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.twinui_pcshell_PTRS[8]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
|
||||
|
||||
@ -598,7 +606,8 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, HMODULE hModule)
|
||||
symbols_PTRS->twinui_pcshell_PTRS[4] = 0x5DAC08;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[5] = 0x5DA8C4;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[6] = 0x5CD9C0;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[7] = 0x52980;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[7] = 0x5f744c;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[8] = 0x52980;
|
||||
bIsTwinuiPcshellHardcoded = TRUE;
|
||||
}
|
||||
else if (!_stricmp(hash, "03487ccd5bc5a194fad61b616b0a2b28") || !_stricmp(hash, "3f6ef12a59a2f84a3296771ea7753e01")) // 346, 348
|
||||
@ -610,7 +619,8 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, HMODULE hModule)
|
||||
symbols_PTRS->twinui_pcshell_PTRS[4] = 0x5DBDD8;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[5] = 0x5DBA94;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[6] = 0x5CEB90;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[7] = 0x4D780;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[7] = 0x5f861c;
|
||||
symbols_PTRS->twinui_pcshell_PTRS[8] = 0x4D780;
|
||||
bIsTwinuiPcshellHardcoded = TRUE;
|
||||
}
|
||||
if (bIsTwinuiPcshellHardcoded)
|
||||
|
@ -17,8 +17,9 @@
|
||||
#define TWINUI_PCSHELL_SB_4 "CLauncherTipContextMenu::_ExecuteShutdownCommand"
|
||||
#define TWINUI_PCSHELL_SB_5 "CLauncherTipContextMenu::_ExecuteCommand"
|
||||
#define TWINUI_PCSHELL_SB_6 "CLauncherTipContextMenu::ShowLauncherTipContextMenu"
|
||||
#define TWINUI_PCSHELL_SB_7 "winrt::Windows::Internal::Shell::implementation::MeetAndChatManager::OnMessage" // should be always last
|
||||
#define TWINUI_PCSHELL_SB_CNT 8
|
||||
#define TWINUI_PCSHELL_SB_7 "IsUndockedAssetAvailable"
|
||||
#define TWINUI_PCSHELL_SB_8 "winrt::Windows::Internal::Shell::implementation::MeetAndChatManager::OnMessage" // should be always last
|
||||
#define TWINUI_PCSHELL_SB_CNT 9
|
||||
#define STARTDOCKED_SB_NAME "StartDocked"
|
||||
#define STARTDOCKED_SB_0 "StartDocked::LauncherFrame::ShowAllApps" // UNUSED
|
||||
#define STARTDOCKED_SB_1 "StartDocked::LauncherFrame::ShowAllApps"
|
||||
|
Loading…
x
Reference in New Issue
Block a user