mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2025-01-19 01:04:08 +01:00
All: Support for Windows 10
This commit is contained in:
parent
d3d11ff67d
commit
9dd911cb8d
@ -91,6 +91,7 @@ END
|
||||
//
|
||||
|
||||
IDR_REGISTRY1 RCDATA "settings.reg"
|
||||
IDR_REGISTRY2 RCDATA "settings10.reg"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -330,6 +330,7 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="settings.reg" />
|
||||
<None Include="settings10.reg" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
@ -210,5 +210,8 @@
|
||||
<None Include="settings.reg">
|
||||
<Filter>Settings</Filter>
|
||||
</None>
|
||||
<None Include="settings10.reg">
|
||||
<Filter>Settings</Filter>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
</Project>
|
@ -362,6 +362,12 @@ LSTATUS GUI_Internal_RegSetValueExW(
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
PostMessageW(FindWindowW(L"Shell_TrayWnd", NULL), WM_COMMAND, 435, 0);
|
||||
DWORD dwProcessId = 0;
|
||||
GetWindowThreadProcessId(FindWindowW(L"Shell_TrayWnd", NULL), &dwProcessId);
|
||||
if (dwProcessId)
|
||||
{
|
||||
AllowSetForegroundWindow(dwProcessId);
|
||||
}
|
||||
return ERROR_SUCCESS;
|
||||
}
|
||||
else if (!wcscmp(lpValueName, L"Virtualized_" _T(EP_CLSID) L"_Start_MaximumFrequentApps"))
|
||||
@ -827,7 +833,7 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
|
||||
{
|
||||
HRSRC hRscr = FindResource(
|
||||
hModule,
|
||||
MAKEINTRESOURCE(IDR_REGISTRY1),
|
||||
IsWindows11() ? MAKEINTRESOURCE(IDR_REGISTRY1) : MAKEINTRESOURCE(IDR_REGISTRY2),
|
||||
RT_RCDATA
|
||||
);
|
||||
if (!hRscr)
|
||||
@ -3096,11 +3102,11 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
}
|
||||
}
|
||||
SetWindowPos(
|
||||
hWnd,
|
||||
hWnd,
|
||||
hWnd,
|
||||
hWnd,
|
||||
mi.rcWork.left + ((mi.rcWork.right - mi.rcWork.left) / 2 - (_this->size.cx * dx) / 2),
|
||||
mi.rcWork.top + ((mi.rcWork.bottom - mi.rcWork.top) / 2 - (_this->size.cy * dy) / 2),
|
||||
_this->size.cx * dxp,
|
||||
_this->size.cx * dxp,
|
||||
_this->size.cy * dyp,
|
||||
SWP_NOZORDER | SWP_NOACTIVATE | SWP_FRAMECHANGED
|
||||
);
|
||||
@ -3482,6 +3488,17 @@ static LRESULT CALLBACK GUI_WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
KillTimer(hWnd, GUI_TIMER_READ_REPEAT_SELECTION);
|
||||
}
|
||||
else if (uMsg == WM_USER + 1)
|
||||
{
|
||||
SetTimer(hWnd, GUI_TIMER_REFRESH_FOR_PEOPLEBAND, GUI_TIMER_REFRESH_FOR_PEOPLEBAND_TIMEOUT, NULL);
|
||||
return 0;
|
||||
}
|
||||
else if (uMsg == WM_TIMER && wParam == GUI_TIMER_REFRESH_FOR_PEOPLEBAND)
|
||||
{
|
||||
InvalidateRect(hWnd, NULL, FALSE);
|
||||
KillTimer(hWnd, GUI_TIMER_REFRESH_FOR_PEOPLEBAND);
|
||||
return 0;
|
||||
}
|
||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
@ -57,6 +57,8 @@ extern HMODULE hModule;
|
||||
#define GUI_TIMER_READ_HELP_TIMEOUT 1000
|
||||
#define GUI_TIMER_READ_REPEAT_SELECTION 2
|
||||
#define GUI_TIMER_READ_REPEAT_SELECTION_TIMEOUT 1000
|
||||
#define GUI_TIMER_REFRESH_FOR_PEOPLEBAND 2
|
||||
#define GUI_TIMER_REFRESH_FOR_PEOPLEBAND_TIMEOUT 1000
|
||||
typedef struct _GUI
|
||||
{
|
||||
POINT location;
|
||||
|
@ -3807,6 +3807,10 @@ BOOL explorer_DeleteMenu(HMENU hMenu, UINT uPosition, UINT uFlags)
|
||||
DeleteMenu(hMenu, 449, 0); // remove Cortana menu
|
||||
DeleteMenu(hMenu, 435, 0); // remove People menu
|
||||
}
|
||||
if (!IsWindows11() && uPosition == 445 && uFlags == 0) // when removing Cortana in Windows 10
|
||||
{
|
||||
DeleteMenu(hMenu, 435, 0);
|
||||
}
|
||||
return DeleteMenu(hMenu, uPosition, uFlags);
|
||||
}
|
||||
|
||||
@ -4629,7 +4633,6 @@ INT64 PeopleButton_SubclassProc(
|
||||
return DefSubclassProc(hWnd, uMsg, wParam, lParam);
|
||||
}
|
||||
|
||||
|
||||
static BOOL(*SetChildWindowNoActivateFunc)(HWND);
|
||||
BOOL explorer_SetChildWindowNoActivateHook(HWND hWnd)
|
||||
{
|
||||
@ -4650,11 +4653,20 @@ BOOL explorer_SetChildWindowNoActivateHook(HWND hWnd)
|
||||
uintptr_t Instance = *(uintptr_t*)GetWindowLongPtrW(hWnd, 0);
|
||||
if (Instance)
|
||||
{
|
||||
uintptr_t TrayButton_GetComponentName = *(INT_PTR(WINAPI**)())(Instance + 304);
|
||||
uintptr_t off_TrayButton_GetComponentName = 0;
|
||||
if (IsWindows11())
|
||||
{
|
||||
off_TrayButton_GetComponentName = 304;
|
||||
}
|
||||
else
|
||||
{
|
||||
off_TrayButton_GetComponentName = 280;
|
||||
}
|
||||
uintptr_t TrayButton_GetComponentName = *(INT_PTR(WINAPI**)())(Instance + off_TrayButton_GetComponentName);
|
||||
if (!IsBadCodePtr(TrayButton_GetComponentName))
|
||||
{
|
||||
wchar_t* wszComponentName = (const WCHAR*)(*(uintptr_t(**)(void))(Instance + 304))();
|
||||
if (!wcscmp(wszComponentName, L"CortanaButton"))
|
||||
wchar_t* wszComponentName = (const WCHAR*)(*(uintptr_t(**)(void))(Instance + off_TrayButton_GetComponentName))();
|
||||
if (!wcscmp(wszComponentName, L"CortanaButton") && IsWindows11())
|
||||
{
|
||||
DWORD dwOldProtect;
|
||||
VirtualProtect(Instance + 160, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
@ -4666,7 +4678,7 @@ BOOL explorer_SetChildWindowNoActivateHook(HWND hWnd)
|
||||
*(uintptr_t*)(Instance + 216) = Widgets_GetTooltipTextHook; // OnTooltipShow
|
||||
VirtualProtect(Instance + 216, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
}
|
||||
else if (!wcscmp(wszComponentName, L"MultitaskingButton"))
|
||||
else if (!wcscmp(wszComponentName, L"MultitaskingButton") && IsWindows11())
|
||||
{
|
||||
DWORD dwOldProtect;
|
||||
VirtualProtect(Instance + 160, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
@ -4684,15 +4696,33 @@ BOOL explorer_SetChildWindowNoActivateHook(HWND hWnd)
|
||||
*(uintptr_t*)(PeopleButton_Instance + 32) = PeopleButton_CalculateMinimumSizeHook; // CalculateMinimumSize
|
||||
VirtualProtect(PeopleButton_Instance + 32, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
|
||||
VirtualProtect(Instance + 224, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
if (!PeopleButton_ShowTooltipFunc) PeopleButton_ShowTooltipFunc = *(uintptr_t*)(Instance + 224);
|
||||
*(uintptr_t*)(Instance + 224) = PeopleButton_ShowTooltipHook; // OnTooltipShow
|
||||
VirtualProtect(Instance + 224, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
uintptr_t off_PeopleButton_ShowTooltip = 0;
|
||||
if (IsWindows11())
|
||||
{
|
||||
off_PeopleButton_ShowTooltip = 224;
|
||||
}
|
||||
else
|
||||
{
|
||||
off_PeopleButton_ShowTooltip = 200;
|
||||
}
|
||||
VirtualProtect(Instance + off_PeopleButton_ShowTooltip, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
if (!PeopleButton_ShowTooltipFunc) PeopleButton_ShowTooltipFunc = *(uintptr_t*)(Instance + off_PeopleButton_ShowTooltip);
|
||||
*(uintptr_t*)(Instance + off_PeopleButton_ShowTooltip) = PeopleButton_ShowTooltipHook; // OnTooltipShow
|
||||
VirtualProtect(Instance + off_PeopleButton_ShowTooltip, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
|
||||
VirtualProtect(Instance + 160, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
if (!PeopleButton_OnClickFunc) PeopleButton_OnClickFunc = *(uintptr_t*)(Instance + 160);
|
||||
*(uintptr_t*)(Instance + 160) = PeopleButton_OnClickHook; // OnClick
|
||||
VirtualProtect(Instance + 160, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
uintptr_t off_PeopleButton_OnClick = 0;
|
||||
if (IsWindows11())
|
||||
{
|
||||
off_PeopleButton_OnClick = 160;
|
||||
}
|
||||
else
|
||||
{
|
||||
off_PeopleButton_OnClick = 136;
|
||||
}
|
||||
VirtualProtect(Instance + off_PeopleButton_OnClick, sizeof(uintptr_t), PAGE_READWRITE, &dwOldProtect);
|
||||
if (!PeopleButton_OnClickFunc) PeopleButton_OnClickFunc = *(uintptr_t*)(Instance + off_PeopleButton_OnClick);
|
||||
*(uintptr_t*)(Instance + off_PeopleButton_OnClick) = PeopleButton_OnClickHook; // OnClick
|
||||
VirtualProtect(Instance + off_PeopleButton_OnClick, sizeof(uintptr_t), dwOldProtect, &dwOldProtect);
|
||||
|
||||
PeopleButton_LastHWND = hWnd;
|
||||
SetWindowSubclass(hWnd, PeopleButton_SubclassProc, PeopleButton_SubclassProc, 0);
|
||||
@ -5041,7 +5071,10 @@ void sws_ReadSettings(sws_WindowSwitcher* sws)
|
||||
|
||||
DWORD WindowSwitcher(DWORD unused)
|
||||
{
|
||||
WaitForSingleObject(hCanStartSws, INFINITE);
|
||||
if (IsWindows11())
|
||||
{
|
||||
WaitForSingleObject(hCanStartSws, INFINITE);
|
||||
}
|
||||
if (!bOldTaskbar)
|
||||
{
|
||||
WaitForSingleObject(hWin11AltTabInitialized, INFINITE);
|
||||
@ -6178,17 +6211,17 @@ void WINAPI LoadSettings(LPARAM lParam)
|
||||
{
|
||||
// this is mostly a hack...
|
||||
DWORD dwGlomLevel = 2, dwSize = sizeof(DWORD), dwNewGlomLevel;
|
||||
RegGetValueW(HKEY_CURRENT_USER, TEXT(REGPATH), L"TaskbarGlomLevel", RRF_RT_DWORD, NULL, &dwGlomLevel, &dwSize);
|
||||
RegGetValueW(HKEY_CURRENT_USER, IsWindows11() ? TEXT(REGPATH) : L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"TaskbarGlomLevel", RRF_RT_DWORD, NULL, &dwGlomLevel, &dwSize);
|
||||
Sleep(100);
|
||||
dwNewGlomLevel = 0;
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, TEXT(REGPATH), L"TaskbarGlomLevel", REG_DWORD, &dwNewGlomLevel, sizeof(DWORD));
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, IsWindows11() ? TEXT(REGPATH) : L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"TaskbarGlomLevel", REG_DWORD, &dwNewGlomLevel, sizeof(DWORD));
|
||||
Explorer_RefreshUI(0);
|
||||
Sleep(100);
|
||||
dwNewGlomLevel = 2;
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, TEXT(REGPATH), L"TaskbarGlomLevel", REG_DWORD, &dwNewGlomLevel, sizeof(DWORD));
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, IsWindows11() ? TEXT(REGPATH) : L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"TaskbarGlomLevel", REG_DWORD, &dwNewGlomLevel, sizeof(DWORD));
|
||||
Explorer_RefreshUI(0);
|
||||
Sleep(100);
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, TEXT(REGPATH), L"TaskbarGlomLevel", REG_DWORD, &dwGlomLevel, sizeof(DWORD));
|
||||
RegSetKeyValueW(HKEY_CURRENT_USER, IsWindows11() ? TEXT(REGPATH) : L"Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Advanced", L"TaskbarGlomLevel", REG_DWORD, &dwGlomLevel, sizeof(DWORD));
|
||||
Explorer_RefreshUI(0);
|
||||
}
|
||||
}
|
||||
@ -7458,7 +7491,7 @@ LSTATUS explorer_RegSetValueExW(
|
||||
DWORD cbData
|
||||
)
|
||||
{
|
||||
if (!lstrcmpW(lpValueName, L"ShowCortanaButton"))
|
||||
if (IsWindows11() && !lstrcmpW(lpValueName, L"ShowCortanaButton"))
|
||||
{
|
||||
if (cbData == sizeof(DWORD) && *(DWORD*)lpData == 1)
|
||||
{
|
||||
@ -7485,7 +7518,7 @@ LSTATUS explorer_RegGetValueW(
|
||||
BOOL bShowTaskViewButton = FALSE;
|
||||
LSTATUS lRes;
|
||||
|
||||
if (!lstrcmpW(lpValue, L"ShowCortanaButton"))
|
||||
if (IsWindows11() && !lstrcmpW(lpValue, L"ShowCortanaButton"))
|
||||
{
|
||||
lRes = RegGetValueW(hkey, lpSubKey, L"TaskbarDa", dwFlags, pdwType, pvData, pcbData);
|
||||
if (*(DWORD*)pvData == 2)
|
||||
@ -7493,7 +7526,7 @@ LSTATUS explorer_RegGetValueW(
|
||||
*(DWORD*)pvData = 1;
|
||||
}
|
||||
}
|
||||
else if (!lstrcmpW(lpValue, L"TaskbarGlomLevel") || !lstrcmpW(lpValue, L"MMTaskbarGlomLevel"))
|
||||
else if (IsWindows11() && (!lstrcmpW(lpValue, L"TaskbarGlomLevel") || !lstrcmpW(lpValue, L"MMTaskbarGlomLevel")))
|
||||
{
|
||||
lRes = RegGetValueW(HKEY_CURRENT_USER, _T(REGPATH), lpValue, dwFlags, pdwType, pvData, pcbData);
|
||||
if (lRes != ERROR_SUCCESS)
|
||||
@ -7512,7 +7545,7 @@ LSTATUS explorer_RegGetValueW(
|
||||
lRes = RegGetValueW(hkey, lpSubKey, lpValue, dwFlags, pdwType, pvData, pcbData);
|
||||
}
|
||||
|
||||
if (!lstrcmpW(lpValue, L"SearchboxTaskbarMode"))
|
||||
if (IsWindows11() && !lstrcmpW(lpValue, L"SearchboxTaskbarMode"))
|
||||
{
|
||||
if (*(DWORD*)pvData)
|
||||
{
|
||||
@ -8411,8 +8444,16 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
HANDLE hStobject = LoadLibraryW(L"stobject.dll");
|
||||
VnPatchIAT(hStobject, "api-ms-win-core-registry-l1-1-0.dll", "RegGetValueW", stobject_RegGetValueW);
|
||||
VnPatchIAT(hStobject, "api-ms-win-core-com-l1-1-0.dll", "CoCreateInstance", stobject_CoCreateInstanceHook);
|
||||
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenu", stobject_TrackPopupMenuHook);
|
||||
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenuEx", stobject_TrackPopupMenuExHook);
|
||||
if (IsWindows11())
|
||||
{
|
||||
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenu", stobject_TrackPopupMenuHook);
|
||||
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenuEx", stobject_TrackPopupMenuExHook);
|
||||
}
|
||||
else
|
||||
{
|
||||
VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenu", stobject_TrackPopupMenuHook);
|
||||
VnPatchIAT(hStobject, "user32.dll", "TrackPopupMenuEx", stobject_TrackPopupMenuExHook);
|
||||
}
|
||||
#ifdef USE_PRIVATE_INTERFACES
|
||||
if (bSkinIcons)
|
||||
{
|
||||
@ -8500,12 +8541,15 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
|
||||
|
||||
|
||||
HANDLE hInputSwitch = LoadLibraryW(L"InputSwitch.dll");
|
||||
printf("[IME] Context menu patch status: %d\n", PatchContextMenuOfNewMicrosoftIME(NULL));
|
||||
if (hInputSwitch)
|
||||
if (IsWindows11())
|
||||
{
|
||||
VnPatchIAT(hInputSwitch, "user32.dll", "TrackPopupMenuEx", inputswitch_TrackPopupMenuExHook);
|
||||
printf("Setup inputswitch functions done\n");
|
||||
HANDLE hInputSwitch = LoadLibraryW(L"InputSwitch.dll");
|
||||
printf("[IME] Context menu patch status: %d\n", PatchContextMenuOfNewMicrosoftIME(NULL));
|
||||
if (hInputSwitch)
|
||||
{
|
||||
VnPatchIAT(hInputSwitch, "user32.dll", "TrackPopupMenuEx", inputswitch_TrackPopupMenuExHook);
|
||||
printf("Setup inputswitch functions done\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -8545,29 +8589,35 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
|
||||
if (bOldTaskbar)
|
||||
{
|
||||
CreateThread(
|
||||
0,
|
||||
0,
|
||||
PlayStartupSound,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
);
|
||||
printf("Play startup sound thread...\n");
|
||||
if (IsWindows11())
|
||||
{
|
||||
CreateThread(
|
||||
0,
|
||||
0,
|
||||
PlayStartupSound,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
);
|
||||
printf("Play startup sound thread...\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (bOldTaskbar)
|
||||
{
|
||||
CreateThread(
|
||||
0,
|
||||
0,
|
||||
SignalShellReady,
|
||||
dwExplorerReadyDelay,
|
||||
0,
|
||||
0
|
||||
);
|
||||
printf("Signal shell ready...\n");
|
||||
if (IsWindows11())
|
||||
{
|
||||
CreateThread(
|
||||
0,
|
||||
0,
|
||||
SignalShellReady,
|
||||
dwExplorerReadyDelay,
|
||||
0,
|
||||
0
|
||||
);
|
||||
printf("Signal shell ready...\n");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -8584,24 +8634,27 @@ DWORD Inject(BOOL bIsExplorer)
|
||||
}
|
||||
|
||||
|
||||
DWORD dwSize = 0;
|
||||
if (SHRegGetValueFromHKCUHKLMFunc && SHRegGetValueFromHKCUHKLMFunc(
|
||||
L"Control Panel\\Desktop\\WindowMetrics",
|
||||
L"MinWidth",
|
||||
SRRF_RT_REG_SZ,
|
||||
NULL,
|
||||
NULL,
|
||||
(LPDWORD)(&dwSize)
|
||||
) != ERROR_SUCCESS)
|
||||
if (IsWindows11())
|
||||
{
|
||||
RegSetKeyValueW(
|
||||
HKEY_CURRENT_USER,
|
||||
DWORD dwSize = 0;
|
||||
if (SHRegGetValueFromHKCUHKLMFunc && SHRegGetValueFromHKCUHKLMFunc(
|
||||
L"Control Panel\\Desktop\\WindowMetrics",
|
||||
L"MinWidth",
|
||||
REG_SZ,
|
||||
L"38",
|
||||
sizeof(L"38")
|
||||
);
|
||||
SRRF_RT_REG_SZ,
|
||||
NULL,
|
||||
NULL,
|
||||
(LPDWORD)(&dwSize)
|
||||
) != ERROR_SUCCESS)
|
||||
{
|
||||
RegSetKeyValueW(
|
||||
HKEY_CURRENT_USER,
|
||||
L"Control Panel\\Desktop\\WindowMetrics",
|
||||
L"MinWidth",
|
||||
REG_SZ,
|
||||
L"38",
|
||||
sizeof(L"38")
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -9655,13 +9708,19 @@ HRESULT EntryPoint(DWORD dwMethod)
|
||||
}
|
||||
else if (bIsThisStartMEH)
|
||||
{
|
||||
InjectStartMenu();
|
||||
if (IsWindows11())
|
||||
{
|
||||
InjectStartMenu();
|
||||
}
|
||||
IncrementDLLReferenceCount(hModule);
|
||||
bInstanced = TRUE;
|
||||
}
|
||||
else if (bIsThisShellEH)
|
||||
{
|
||||
InjectShellExperienceHost();
|
||||
if (IsWindows11())
|
||||
{
|
||||
InjectShellExperienceHost();
|
||||
}
|
||||
IncrementDLLReferenceCount(hModule);
|
||||
bInstanced = TRUE;
|
||||
}
|
||||
|
@ -15,6 +15,7 @@
|
||||
#define IDS_UNINSTALL_SUCCESS_TEXT 111
|
||||
#define IDS_UNINSTALL_ERROR_TEXT 112
|
||||
#define IDS_OPERATION_NONE 113
|
||||
#define IDR_REGISTRY2 114
|
||||
|
||||
// Next default values for new objects
|
||||
//
|
||||
|
@ -520,8 +520,6 @@
|
||||
"NoPropertiesInContextMenu"=dword:00000000
|
||||
;b Enable symbols download *
|
||||
"EnableSymbolDownload"=dword:00000001
|
||||
;i Do not hook Start menu from main Explorer process (permanently disabled) *
|
||||
"HookStartMenu"=dword:00000001
|
||||
;c 12 Supplementary delay at logon *
|
||||
;x 0 None (default)
|
||||
;x 300 300 ms
|
||||
|
495
ExplorerPatcher/settings10.reg
Normal file
495
ExplorerPatcher/settings10.reg
Normal file
@ -0,0 +1,495 @@
|
||||
Windows Registry Editor Version 5.00
|
||||
|
||||
|
||||
;M Settings
|
||||
;q
|
||||
|
||||
;T Taskbar
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;y More taskbar options in the Settings app 🡕
|
||||
;ms-settings:taskbar
|
||||
;y Customize notification area icons 🡕
|
||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}
|
||||
;y Customize system icons in the notification area 🡕
|
||||
;shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;c 4 Primary taskbar location on screen *
|
||||
;x 3 Bottom (default)
|
||||
;x 1 Top
|
||||
;x 0 Left
|
||||
;x 2 Right
|
||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_TaskbarPosition"=dword:00000003
|
||||
;c 4 Secondary taskbar(s) location on screen
|
||||
;x 3 Bottom (default)
|
||||
;x 1 Top
|
||||
;x 0 Left
|
||||
;x 2 Right
|
||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_MMTaskbarPosition"=dword:00000003
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;b Show Cortana button
|
||||
"ShowCortanaButton"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Search]
|
||||
;b Show Search button
|
||||
"SearchboxTaskbarMode"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;b Show Task view button
|
||||
"ShowTaskViewButton"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;b Show Desktop button
|
||||
"TaskbarSD"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Automatically hide the taskbar
|
||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_AutoHideTaskbar"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;c 2 Start button style
|
||||
;x 0 Windows 10 (default)
|
||||
;x 1 Windows 11
|
||||
"OrbStyle"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;c 3 Combine taskbar icons on primary taskbar
|
||||
;x 0 Always combine (default)
|
||||
;x 1 Combine when taskbar is full
|
||||
;x 2 Never combine
|
||||
"TaskbarGlomLevel"=dword:00000000
|
||||
;c 3 Combine taskbar icons on secondary taskbar(s)
|
||||
;x 0 Always combine (default)
|
||||
;x 1 Combine when taskbar is full
|
||||
;x 2 Never combine
|
||||
"MMTaskbarGlomLevel"=dword:00000000
|
||||
;c 2 Taskbar icon size
|
||||
;x 1 Small
|
||||
;x 0 Large (default)
|
||||
"TaskbarSmallIcons"=dword:00000000
|
||||
;e
|
||||
;e
|
||||
;e
|
||||
;e
|
||||
|
||||
;T System tray
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Skin taskbar and tray pop-up menus
|
||||
"SkinMenus"=dword:00000001
|
||||
;b Center tray icon pop-up menus
|
||||
"CenterMenus"=dword:00000001
|
||||
;b Flyout behavior for tray icon pop-up menus
|
||||
"FlyoutMenus"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\TabletTip\1.7]
|
||||
;b Show touch keyboard button *
|
||||
"TipbandDesiredVisibility"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;p 2
|
||||
;b Apply Windows 11 style to system tray icons *
|
||||
"SkinIcons"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;b Show seconds in the clock
|
||||
"ShowSecondsInSystemClock"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;a Choosing 'Open Network && Internet settings' when right clicking the
|
||||
;c 3 network icon should open:
|
||||
;x 0 Network section in the Settings app (default)
|
||||
;x 1 Network and Sharing Center in Control Panel
|
||||
;x 2 Network Connections in Control Panel
|
||||
"ReplaceNetwork"=dword:00000000
|
||||
;q
|
||||
;t When clicking a system icon in the system tray, open:
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Control Panel\Settings\Network]
|
||||
;c 6 Network
|
||||
;x 6 Control Center
|
||||
;x 0 Windows 10 flyout (default)
|
||||
;x 2 Windows 8 flyout
|
||||
;x 1 Network section in the Settings app
|
||||
;x 3 Network and Sharing Center in Control Panel
|
||||
;x 4 Network Connections in Control Panel
|
||||
"ReplaceVan"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\MTCUVC]
|
||||
;c 2 Sound
|
||||
;x 1 Windows 10 flyout (default)
|
||||
;x 0 Windows 7 flyout
|
||||
"EnableMtcUvc"=dword:00000001
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell]
|
||||
;c 2 Clock
|
||||
;x 0 Windows 10 flyout (default)
|
||||
;x 1 Windows 7
|
||||
"UseWin32TrayClockExperience"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ImmersiveShell]
|
||||
;c 2 Battery
|
||||
;x 0 Windows 10 flyout (default)
|
||||
;x 1 Windows 7
|
||||
"UseWin32BatteryFlyout"=dword:00000000
|
||||
|
||||
|
||||
;T File Explorer
|
||||
;e For the settings marked with (**) to work in Open or Save file dialogs as well, register
|
||||
;e this utility as shell extension using the option below.
|
||||
;y Learn more 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Using-ExplorerPatcher-as-shell-extension
|
||||
;q
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;i Use immersive menus when displaying Windows 10 context menus **
|
||||
"DisableImmersiveContextMenu"=dword:00000000
|
||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{056440FD-8568-48e7-A632-72157243B55B}\InprocServer32]
|
||||
;d Disable navigation bar **
|
||||
@=""
|
||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1d64637d-31e9-4b06-9124-e83fb178ac6e}\TreatAs]
|
||||
;d Disable modern search bar
|
||||
@="{64bc32b5-4eec-4de7-972d-bd8bd0324537}"
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Hide search bar completely **
|
||||
"HideExplorerSearchBar"=dword:00000000
|
||||
;p 2
|
||||
;b Mica effect on title bar
|
||||
"MicaEffectOnTitlebar"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Register as shell extension
|
||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_RegisterAsShellExtension"=dword:00000000
|
||||
|
||||
|
||||
;T Start menu
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\StartPage]
|
||||
;e When using multiple displays, open Start on this monitor when invoked using
|
||||
;z 10 the keyboard:
|
||||
;x 1 Primary monitor (default)
|
||||
;x 0 Monitor on which the cursor is on
|
||||
;x 2 Monitor #2
|
||||
;x 3 Monitor #3
|
||||
;x 4 Monitor #4
|
||||
;x 5 Monitor #5
|
||||
;x 6 Monitor #6
|
||||
;x 7 Monitor #7
|
||||
;x 8 Monitor #8
|
||||
;x 9 Monitor #9
|
||||
"MonitorOverride"=dword:00000001
|
||||
;e If the selected monitor is not available, Start will open on the primary display.
|
||||
|
||||
|
||||
;T Window switcher
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
|
||||
;z 3 Window switcher (Alt+Tab) style *
|
||||
;x 0 Windows 10 (default)
|
||||
;x 1 Windows NT
|
||||
;x 2 Simple Window Switcher
|
||||
"AltTabSettings"=dword:00000000
|
||||
;t The following settings only apply to the Simple Window Switcher:
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws]
|
||||
;b Include desktop
|
||||
"IncludeWallpaper"=dword:00000001
|
||||
;b Always show on primary monitor
|
||||
"PrimaryOnly"=dword:00000000
|
||||
;b Show windows only from current monitor
|
||||
"PerMonitor"=dword:00000000
|
||||
;b Display only the most recent window (per application switcher)
|
||||
"SwitcherIsPerApplication"=dword:00000000
|
||||
;b %PLACEHOLDER_0001%
|
||||
"NoPerApplicationList"=dword:00000000
|
||||
;c 3 Theme
|
||||
;x 0 Default
|
||||
;x 1 Acrylic
|
||||
;x 2 Mica (always opaque)
|
||||
"Theme"=dword:00000000
|
||||
[HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MultitaskingView\AltTabViewHost]
|
||||
;c 19 Opacity
|
||||
;x 100 Opaque
|
||||
;x 98 98 %
|
||||
;x 96 96 %
|
||||
;x 95 95 % (default)
|
||||
;x 94 94 %
|
||||
;x 92 92 %
|
||||
;x 90 90 %
|
||||
;x 85 85 %
|
||||
;x 80 80 %
|
||||
;x 75 75 %
|
||||
;x 70 70 %
|
||||
;x 65 65 %
|
||||
;x 60 60 %
|
||||
;x 55 55 %
|
||||
;x 50 50 %
|
||||
;x 45 45 %
|
||||
;x 40 40 %
|
||||
;x 35 35 %
|
||||
;x 30 30 %
|
||||
"Grid_backgroundPercent"=dword:0000005F
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws]
|
||||
;c 3 Color scheme
|
||||
;x 0 Follow system setting (default)
|
||||
;x 1 Light
|
||||
;x 2 Dark
|
||||
"ColorScheme"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws]
|
||||
;c 3 Corner preference
|
||||
;x 2 Rounded (default)
|
||||
;x 3 Small rounded
|
||||
;x 1 Not rounded
|
||||
"CornerPreference"=dword:00000002
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher\sws]
|
||||
;c 20 Row height
|
||||
;x 330 330 pt
|
||||
;x 320 320 pt
|
||||
;x 310 310 pt
|
||||
;x 300 300 pt
|
||||
;x 290 290 pt
|
||||
;x 280 280 pt
|
||||
;x 270 270 pt
|
||||
;x 260 260 pt
|
||||
;x 250 250 pt
|
||||
;x 240 240 pt
|
||||
;x 230 230 pt (default)
|
||||
;x 220 220 pt
|
||||
;x 210 210 pt
|
||||
;x 200 200 pt
|
||||
;x 190 190 pt
|
||||
;x 180 180 pt
|
||||
;x 170 170 pt
|
||||
;x 160 160 pt
|
||||
;x 150 150 pt
|
||||
;x 140 140 pt
|
||||
"RowHeight"=dword:000000e6
|
||||
;c 10 Maximum width (percentage of screen width)
|
||||
;x 100 100 % (not recommended)
|
||||
;x 95 95 %
|
||||
;x 90 90 %
|
||||
;x 85 85 %
|
||||
;x 80 80 % (default)
|
||||
;x 75 75 %
|
||||
;x 70 70 %
|
||||
;x 65 65 %
|
||||
;x 60 60 %
|
||||
;x 55 55 %
|
||||
"MaxWidth"=dword:00000050
|
||||
;c 10 Maximum height (percentage of screen height)
|
||||
;x 100 100 % (not recommended)
|
||||
;x 95 95 %
|
||||
;x 90 90 %
|
||||
;x 85 85 %
|
||||
;x 80 80 % (default)
|
||||
;x 75 75 %
|
||||
;x 70 70 %
|
||||
;x 65 65 %
|
||||
;x 60 60 %
|
||||
;x 55 55 %
|
||||
"MaxHeight"=dword:00000050
|
||||
;c 11 Window padding
|
||||
;x 50 50 pt
|
||||
;x 45 45 pt
|
||||
;x 40 40 pt (default)
|
||||
;x 35 30 pt
|
||||
;x 30 30 pt
|
||||
;x 25 25 pt
|
||||
;x 20 20 pt
|
||||
;x 15 15 pt
|
||||
;x 10 10 pt
|
||||
;x 5 5 pt
|
||||
;x 0 None
|
||||
"MasterPadding"=dword:00000028
|
||||
;c 11 Show delay
|
||||
;x 0 None
|
||||
;x 25 25 ms
|
||||
;x 50 50 ms
|
||||
;x 75 75 ms
|
||||
;x 100 100 ms (default)
|
||||
;x 125 125 ms
|
||||
;x 150 150 ms
|
||||
;x 200 200 ms
|
||||
;x 300 300 ms
|
||||
;x 400 400 ms
|
||||
;x 500 500 ms
|
||||
"ShowDelay"=dword:00000064
|
||||
;q
|
||||
;y Learn more about Simple Window Switcher 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Simple-Window-Switcher
|
||||
|
||||
|
||||
|
||||
;T Weather
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Show Weather on the taskbar
|
||||
;"Virtualized_{D17F1E1A-5919-4427-8F89-A1A8503CA3EB}_PeopleBand"=dword:00000000
|
||||
;c 5 Layout
|
||||
;x 0 Icon and description (default)
|
||||
;x 3 Icon and temperature
|
||||
;x 1 Icon only
|
||||
;x 4 Temperature only
|
||||
;x 5 Temperature and description
|
||||
"WeatherViewMode"=dword:00000000
|
||||
;c 2 Widget size
|
||||
;x 0 Enlarge/shrink to fit contents (default)
|
||||
;x 1 Fixed
|
||||
"WeatherFixedSize"=dword:00000000
|
||||
;c 7 Update frequency
|
||||
;x 60 Every minute
|
||||
;x 300 Every 5 minutes
|
||||
;x 900 Every 15 minutes
|
||||
;x 1200 Every 20 minutes (default)
|
||||
;x 1800 Every half an hour
|
||||
;x 3600 Every hour
|
||||
;x 7200 Every couple of hours
|
||||
"WeatherContentUpdateMode"=dword:000004B0
|
||||
;c 2 Temperature unit
|
||||
;x 0 Celsius (default)
|
||||
;x 1 Fahrenheit
|
||||
"WeatherTemperatureUnit"=dword:00000000
|
||||
;w Location
|
||||
;Search City or Zip Code; the program looks up "weather in /* what you typed */" on Google. Leave blank for the default value (current location).
|
||||
;Current location (default)
|
||||
"WeatherLocation"=""
|
||||
;;;c 2 Location accuracy
|
||||
;;;x 0 Generic (based on the IP address) (default)
|
||||
;;;x 1 Precise (geolocation)
|
||||
;;"WeatherLocationType"=dword:00000000
|
||||
;w Language
|
||||
;Type the short code for the language you'd like the weather data to be displayed in. For example, try "en", "ro", "de", "fr" etc. Leave blank for the default value (language of the Windows OS).
|
||||
;System language (default)
|
||||
"WeatherLanguage"=""
|
||||
;c 3 Color scheme
|
||||
;x 0 Follow system setting (default)
|
||||
;x 1 Light
|
||||
;x 2 Dark
|
||||
"WeatherTheme"=dword:00000000
|
||||
;c 3 Corner preference
|
||||
;x 2 Rounded (default)
|
||||
;x 3 Small rounded
|
||||
;x 1 Not rounded
|
||||
"WeatherWindowCornerPreference"=dword:00000002
|
||||
;q
|
||||
;t Weather data courtesy of Google, and weather.com.
|
||||
;y Learn more about the Weather taskbar widget 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Weather
|
||||
;u Update weather now
|
||||
;update_weather
|
||||
;u Clear weather widget local data
|
||||
;clear_data_weather
|
||||
|
||||
|
||||
|
||||
;T Other
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Remember last used section in this window
|
||||
"LastSectionInProperties"=dword:00000000
|
||||
;b Open clock flyout when pressing Win+C instead of Microsoft Teams *
|
||||
"ClockFlyoutOnWinC"=dword:00000000
|
||||
;b Show separators between taskbar toolbars *
|
||||
"ToolbarSeparators"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;b Show Command Prompt instead of PowerShell in Win+X menu *
|
||||
"DontUsePowerShellOnWinX"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Remove shortcut key from program settings item in Win+X menu
|
||||
"NoMenuAccelerator"=dword:00000000
|
||||
;b Disable Office hotkeys (Ctrl+Alt+Shift+Windows key combinations) *
|
||||
"DisableOfficeHotkeys"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Advanced]
|
||||
;c 6 Default action in the Alt+F4 dialog on the desktop
|
||||
;x 256 Switch user
|
||||
;x 1 Sign out
|
||||
;x 16 Sleep
|
||||
;x 64 Hibernate
|
||||
;x 2 Shut down (default)
|
||||
;x 4 Restart
|
||||
"Start_PowerButtonAction"=dword:00000002
|
||||
;t Prevent the following Control Panel links from being redirected to the Settings app:
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b System / About page
|
||||
"DoNotRedirectSystemToSettingsApp"=dword:00000000
|
||||
;b Programs and Features
|
||||
"DoNotRedirectProgramsAndFeaturesToSettingsApp"=dword:00000000
|
||||
;b Adjust date/time
|
||||
"DoNotRedirectDateAndTimeToSettingsApp"=dword:00000000
|
||||
;b Customize notification icons
|
||||
"DoNotRedirectNotificationIconsToSettingsApp"=dword:00000000
|
||||
|
||||
|
||||
;T Updates
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;z 3 When File Explorer starts
|
||||
;x 1 Notify about available updates (default)
|
||||
;x 0 Prompt to install available updates
|
||||
;x 2 Do not check for updates
|
||||
"UpdatePolicy"=dword:00000001
|
||||
;b Receive pre-release versions, if available (not recommended)
|
||||
"UpdatePreferStaging"=dword:00000000
|
||||
;t Update servers:
|
||||
;w Releases
|
||||
;Type a URL that serves resources adhering to GitHub's releases API. To learn how to configure your own update server, please consult the wiki.
|
||||
;github.com/valinet/ExplorerPatcher/releases/latest
|
||||
"UpdateURL"=""
|
||||
;w Pre-releases
|
||||
;Type a URL that serves resources adhering to GitHub's pre-releases API. To learn how to configure your own update server, please consult the wiki.
|
||||
;api.github.com/repos/valinet/ExplorerPatcher/releases?per_page=1
|
||||
"UpdateURLStaging"=""
|
||||
;y Check for updates
|
||||
;;;EP_CHECK_FOR_UPDATES
|
||||
;y Update program and restart File Explorer
|
||||
;;;EP_INSTALL_UPDATES
|
||||
;y Read about changes in the latest releases 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/blob/master/CHANGELOG.md
|
||||
;y Learn more 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Configure-updates
|
||||
|
||||
|
||||
;T Advanced
|
||||
;e Only change these settings after reading the documentation about them.
|
||||
;y Learn more 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/About-advanced-settings
|
||||
;q
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Enable console
|
||||
"AllocConsole"=dword:00000000
|
||||
;b Dump memory leaks
|
||||
"Memcheck"=dword:00000000
|
||||
;b Double click taskbar to toggle auto-hide (only works when the taskbar is locked)
|
||||
"TaskbarAutohideOnDoubleClick"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Control Panel\Desktop]
|
||||
;b Show Windows build info on the desktop *
|
||||
"PaintDesktopVersion"=dword:00000000
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Enable advanced mitigations for correct rendering using classic theme *
|
||||
"ClassicThemeMitigations"=dword:00000000
|
||||
[-HKEY_CURRENT_USER\Software\Classes\CLSID\{1eeb5b5a-06fb-4732-96b3-975c0194eb39}\InprocServer32]
|
||||
;d Enable SysListView32 for Explorer views *
|
||||
@=""
|
||||
[HKEY_CURRENT_USER\Software\ExplorerPatcher]
|
||||
;b Hide the program settings item ("Properties") from the taskbar context menu
|
||||
"NoPropertiesInContextMenu"=dword:00000000
|
||||
;b Enable symbols download *
|
||||
"EnableSymbolDownload"=dword:00000001
|
||||
;b Pinned items act as quick launch (don't group pinned items with active apps) *
|
||||
"PinnedItemsActAsQuickLaunch"=dword:00000000
|
||||
;b When the taskbar shows button labels, remove the extra gap around pinned items
|
||||
"RemoveExtraGapAroundPinnedItems"=dword:00000000
|
||||
|
||||
|
||||
;T About
|
||||
;e ExplorerPatcher
|
||||
;e Version %VERSIONINFORMATIONSTRING%
|
||||
;t © 2006-2022 VALINET Solutions SRL. All rights reserved.
|
||||
;e
|
||||
;e This project aims to enhance the working environment on Windows 10.
|
||||
;t Proudly engineered by Valentin-Gabriel Radu.
|
||||
;y Visit project GitHub (https://github.com/valinet) 🡕
|
||||
;https://github.com/valinet
|
||||
;q
|
||||
;y Visit web site (https://www.valinet.ro) 🡕
|
||||
;https://www.valinet.ro
|
||||
;y E-mail author (valentingabrielradu@gmail.com) 🡕
|
||||
;mailto:valentingabrielradu@gmail.com
|
||||
;y Donate (using PayPal) 🡕
|
||||
;https://www.paypal.com/donate?business=valentingabrielradu%40gmail.com&no_recurring=0&item_name=ExplorerPatcher¤cy_code=EUR
|
||||
;y Frequently Asked Questions 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Frequently-asked-questions
|
||||
;y Learn more managing these settings 🡕
|
||||
;https://github.com/valinet/ExplorerPatcher/wiki/Settings-management
|
||||
;u Import settings
|
||||
;import
|
||||
;u Export current settings
|
||||
;export
|
||||
;u Restore default settings
|
||||
;reset
|
||||
|
||||
|
||||
|
||||
;f
|
||||
;u Restart File Explorer (*)
|
||||
;restart
|
||||
;;u Restore default settings
|
||||
;;reset
|
||||
;;u About ExplorerPatcher
|
||||
;;about
|
@ -234,35 +234,29 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
return 4;
|
||||
}
|
||||
printf("[Symbols] Reading symbols...\n");
|
||||
if (!IsWindows11())
|
||||
{
|
||||
DWORD flOldProtect = 0;
|
||||
if (VirtualProtect(twinui_pcshell_SN, sizeof(twinui_pcshell_SN), PAGE_EXECUTE_READWRITE, &flOldProtect))
|
||||
{
|
||||
twinui_pcshell_SN[1] = twinui_pcshell_SN[0];
|
||||
VirtualProtect(twinui_pcshell_SN, sizeof(twinui_pcshell_SN), flOldProtect, &flOldProtect);
|
||||
}
|
||||
}
|
||||
if (VnGetSymbols(
|
||||
szSettingsPath,
|
||||
symbols_PTRS.twinui_pcshell_PTRS,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT
|
||||
IsWindows11() ? TWINUI_PCSHELL_SB_CNT : 4
|
||||
))
|
||||
{
|
||||
//printf("[Symbols] Hooking Win+C is not available in this build.\n");
|
||||
DWORD dwZero = 0;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(TWINUI_PCSHELL_SB_8),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwZero,
|
||||
sizeof(DWORD)
|
||||
);
|
||||
if (VnGetSymbols(
|
||||
szSettingsPath,
|
||||
symbols_PTRS.twinui_pcshell_PTRS,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT - 1
|
||||
))
|
||||
if (IsWindows11())
|
||||
{
|
||||
printf("[Symbols] Windows 10 window switcher style is not available in this build.\n");
|
||||
//printf("[Symbols] Hooking Win+C is not available in this build.\n");
|
||||
DWORD dwZero = 0;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(TWINUI_PCSHELL_SB_7),
|
||||
TEXT(TWINUI_PCSHELL_SB_8),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwZero,
|
||||
@ -272,20 +266,54 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
szSettingsPath,
|
||||
symbols_PTRS.twinui_pcshell_PTRS,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT - 2
|
||||
TWINUI_PCSHELL_SB_CNT - 1
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (params->bVerbose)
|
||||
printf("[Symbols] Windows 10 window switcher style is not available in this build.\n");
|
||||
DWORD dwZero = 0;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(TWINUI_PCSHELL_SB_7),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&dwZero,
|
||||
sizeof(DWORD)
|
||||
);
|
||||
if (VnGetSymbols(
|
||||
szSettingsPath,
|
||||
symbols_PTRS.twinui_pcshell_PTRS,
|
||||
twinui_pcshell_SN,
|
||||
TWINUI_PCSHELL_SB_CNT - 2
|
||||
))
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
5
|
||||
);
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (params->bVerbose)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
5
|
||||
);
|
||||
}
|
||||
return 5;
|
||||
}
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", twinui_pcshell_sb_dll);
|
||||
if (params->bVerbose)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
5
|
||||
);
|
||||
}
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
if (!IsWindows11())
|
||||
{
|
||||
symbols_PTRS.twinui_pcshell_PTRS[1] = 0;
|
||||
}
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
@ -363,136 +391,138 @@ DWORD DownloadSymbols(DownloadSymbolsParams* params)
|
||||
|
||||
|
||||
|
||||
ZeroMemory(hash, sizeof(WCHAR) * 100);
|
||||
ZeroMemory(wszPath, sizeof(WCHAR) * 100);
|
||||
char startdocked_sb_dll[MAX_PATH];
|
||||
ZeroMemory(
|
||||
startdocked_sb_dll,
|
||||
(MAX_PATH) * sizeof(char)
|
||||
);
|
||||
GetWindowsDirectoryA(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\"
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
STARTDOCKED_SB_NAME
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
".dll"
|
||||
);
|
||||
GetWindowsDirectoryW(wszPath, MAX_PATH);
|
||||
wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\" _T(STARTDOCKED_SB_NAME) L".dll");
|
||||
ComputeFileHash(wszPath, hash, 100);
|
||||
printf("[Symbols] Downloading symbols for \"%s\" (\"%s\")...\n", startdocked_sb_dll, hash);
|
||||
if (VnDownloadSymbols(
|
||||
NULL,
|
||||
startdocked_sb_dll,
|
||||
szSettingsPath,
|
||||
MAX_PATH
|
||||
))
|
||||
if (IsWindows11())
|
||||
{
|
||||
printf("[Symbols] Symbols for \"%s\" are not available - unable to download.\n", startdocked_sb_dll);
|
||||
printf("[Symbols] Please refer to \"https://github.com/valinet/ExplorerPatcher/wiki/Symbols\" for more information.\n");
|
||||
if (params->bVerbose)
|
||||
ZeroMemory(hash, sizeof(WCHAR) * 100);
|
||||
ZeroMemory(wszPath, sizeof(WCHAR) * 100);
|
||||
char startdocked_sb_dll[MAX_PATH];
|
||||
ZeroMemory(
|
||||
startdocked_sb_dll,
|
||||
(MAX_PATH) * sizeof(char)
|
||||
);
|
||||
GetWindowsDirectoryA(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\"
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
STARTDOCKED_SB_NAME
|
||||
);
|
||||
strcat_s(
|
||||
startdocked_sb_dll,
|
||||
MAX_PATH,
|
||||
".dll"
|
||||
);
|
||||
GetWindowsDirectoryW(wszPath, MAX_PATH);
|
||||
wcscat_s(wszPath, MAX_PATH, L"\\SystemApps\\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy\\" _T(STARTDOCKED_SB_NAME) L".dll");
|
||||
ComputeFileHash(wszPath, hash, 100);
|
||||
printf("[Symbols] Downloading symbols for \"%s\" (\"%s\")...\n", startdocked_sb_dll, hash);
|
||||
if (VnDownloadSymbols(
|
||||
NULL,
|
||||
startdocked_sb_dll,
|
||||
szSettingsPath,
|
||||
MAX_PATH
|
||||
))
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
6
|
||||
);
|
||||
printf("[Symbols] Symbols for \"%s\" are not available - unable to download.\n", startdocked_sb_dll);
|
||||
printf("[Symbols] Please refer to \"https://github.com/valinet/ExplorerPatcher/wiki/Symbols\" for more information.\n");
|
||||
if (params->bVerbose)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
6
|
||||
);
|
||||
}
|
||||
return 6;
|
||||
}
|
||||
return 6;
|
||||
}
|
||||
printf("[Symbols] Reading symbols...\n");
|
||||
if (VnGetSymbols(
|
||||
szSettingsPath,
|
||||
symbols_PTRS.startdocked_PTRS,
|
||||
startdocked_SN,
|
||||
STARTDOCKED_SB_CNT
|
||||
))
|
||||
{
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", startdocked_sb_dll);
|
||||
if (params->bVerbose)
|
||||
printf("[Symbols] Reading symbols...\n");
|
||||
if (VnGetSymbols(
|
||||
szSettingsPath,
|
||||
symbols_PTRS.startdocked_PTRS,
|
||||
startdocked_SN,
|
||||
STARTDOCKED_SB_CNT
|
||||
))
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
7
|
||||
);
|
||||
printf("[Symbols] Failure in reading symbols for \"%s\".\n", startdocked_sb_dll);
|
||||
if (params->bVerbose)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
7
|
||||
);
|
||||
}
|
||||
return 7;
|
||||
}
|
||||
return 7;
|
||||
}
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTDOCKED_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_WRITE,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
if (!hKey || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
if (params->bVerbose)
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTDOCKED_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_WRITE,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
if (!hKey || hKey == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
8
|
||||
);
|
||||
if (params->bVerbose)
|
||||
{
|
||||
FreeLibraryAndExitThread(
|
||||
hModule,
|
||||
8
|
||||
);
|
||||
}
|
||||
return 8;
|
||||
}
|
||||
return 8;
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_0),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[0]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_1),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[1]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_2),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[2]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_3),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[3]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_4),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[4]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
}
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_0),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[0]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_1),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[1]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_2),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[2]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_3),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[3]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
RegSetValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_4),
|
||||
0,
|
||||
REG_DWORD,
|
||||
&(symbols_PTRS.startdocked_PTRS[4]),
|
||||
sizeof(DWORD)
|
||||
);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -854,67 +884,80 @@ BOOL LoadSymbols(symbols_addr* symbols_PTRS, HMODULE hModule)
|
||||
);
|
||||
RegCloseKey(hKey);
|
||||
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTDOCKED_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_0),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[0]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_1),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[1]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_2),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[2]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_3),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[3]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_4),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[4]),
|
||||
&dwSize
|
||||
);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
if (IsWindows11())
|
||||
{
|
||||
RegCreateKeyExW(
|
||||
HKEY_CURRENT_USER,
|
||||
TEXT(REGPATH_STARTMENU) L"\\" TEXT(STARTDOCKED_SB_NAME),
|
||||
0,
|
||||
NULL,
|
||||
REG_OPTION_NON_VOLATILE,
|
||||
KEY_READ,
|
||||
NULL,
|
||||
&hKey,
|
||||
&dwDisposition
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_0),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[0]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_1),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[1]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_2),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[2]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_3),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[3]),
|
||||
&dwSize
|
||||
);
|
||||
RegQueryValueExW(
|
||||
hKey,
|
||||
TEXT(STARTDOCKED_SB_4),
|
||||
0,
|
||||
NULL,
|
||||
&(symbols_PTRS->startdocked_PTRS[4]),
|
||||
&dwSize
|
||||
);
|
||||
if (hKey) RegCloseKey(hKey);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL bNeedToDownload = FALSE;
|
||||
for (UINT i = 0; i < sizeof(symbols_addr) / sizeof(DWORD); ++i)
|
||||
if (IsWindows11())
|
||||
{
|
||||
if (!((DWORD*)symbols_PTRS)[i] &&
|
||||
(((DWORD*)symbols_PTRS) + i) != symbols_PTRS->twinui_pcshell_PTRS + TWINUI_PCSHELL_SB_CNT - 1 &&
|
||||
(((DWORD*)symbols_PTRS) + i) != symbols_PTRS->twinui_pcshell_PTRS + TWINUI_PCSHELL_SB_CNT - 2
|
||||
)
|
||||
for (UINT i = 0; i < sizeof(symbols_addr) / sizeof(DWORD); ++i)
|
||||
{
|
||||
if (!((DWORD*)symbols_PTRS)[i] &&
|
||||
(((DWORD*)symbols_PTRS) + i) != symbols_PTRS->twinui_pcshell_PTRS + TWINUI_PCSHELL_SB_CNT - 1 &&
|
||||
(((DWORD*)symbols_PTRS) + i) != symbols_PTRS->twinui_pcshell_PTRS + TWINUI_PCSHELL_SB_CNT - 2
|
||||
)
|
||||
{
|
||||
bNeedToDownload = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!symbols_PTRS->twinui_pcshell_PTRS[0] || !symbols_PTRS->twinui_pcshell_PTRS[2] || !symbols_PTRS->twinui_pcshell_PTRS[3])
|
||||
{
|
||||
bNeedToDownload = TRUE;
|
||||
}
|
||||
|
@ -1281,6 +1281,7 @@ LRESULT CALLBACK PleaseWait_HookProc(int code, WPARAM wParam, LPARAM lParam)
|
||||
PleaseWaitHook = NULL;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
BOOL DownloadAndInstallWebView2Runtime()
|
||||
{
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "queryversion.h"
|
||||
#pragma comment(lib, "Psapi.lib")
|
||||
#include <activscp.h>
|
||||
#include <valinet/utility/osversion.h>
|
||||
|
||||
#include "def.h"
|
||||
|
||||
@ -563,5 +564,16 @@ BOOL PleaseWait_UpdateTimeout(int timeout);
|
||||
VOID CALLBACK PleaseWait_TimerProc(HWND hWnd, UINT uMsg, UINT idEvent, DWORD dwTime);
|
||||
LRESULT CALLBACK PleaseWait_HookProc(int code, WPARAM wParam, LPARAM lParam);
|
||||
|
||||
inline BOOL IsWindows11()
|
||||
{
|
||||
RTL_OSVERSIONINFOW rovi;
|
||||
DWORD32 ubr = VnGetOSVersionAndUBR(&rovi);
|
||||
if (rovi.dwBuildNumber >= 21996)
|
||||
{
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL DownloadAndInstallWebView2Runtime();
|
||||
#endif
|
||||
|
@ -1,5 +1,5 @@
|
||||
# Explorer Patcher for Windows 11
|
||||
This project aims to bring back a productive working environment on Windows 11.
|
||||
# ExplorerPatcher
|
||||
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
|
||||
|
||||
@ -18,6 +18,8 @@ PayPal donations: [here](https://www.paypal.com/donate?business=valentingabrielr
|
||||
* Disable immersive menus and use mitigations that help you run the real classic theme without glitches.
|
||||
* Learn more about all the functionality offered by this program starting with this article in the wiki, [here](https://github.com/valinet/ExplorerPatcher/wiki/All-features).
|
||||
|
||||
Some features may not be available on Windows 10.
|
||||
|
||||
## How to?
|
||||
|
||||
1. Download the latest version of the [setup program](https://github.com/valinet/ExplorerPatcher/releases/latest/download/ep_setup.exe).
|
||||
|
Loading…
x
Reference in New Issue
Block a user