1
0
mirror of https://github.com/valinet/ExplorerPatcher.git synced 2024-11-23 23:21:08 +01:00

Housekeeping

This commit is contained in:
Valentin Radu 2021-10-13 03:38:38 +03:00
parent aa8b1eeb93
commit 776a920865
9 changed files with 121 additions and 62 deletions

2
.gitignore vendored
View File

@ -1,3 +1,5 @@
ep_private.h
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##

View File

@ -2,17 +2,19 @@
This document includes the same release notes as in the [Releases](https://github.com/valinet/ExplorerPatcher/releases) section on GitHub.
## 22000.194.0.24
## 22000.194.0.25
Tested on build: 22000.194.
* Start menu is hooked from File Explorer; please remove the DLL from `C:\Windows\SystemApps\Microsoft.Windows.StartMenuExperienceHost_cw5n1h2txyewy` when using this new version
* `Win`+`X` now opens even when the taskbar is set to autohide (fixes #63)
* `Win`+`C` now opens even when the taskbar is set to autohide (fixes #63)
* Bluetooth and Safe to Remove menus toggle their visibility when clicked
* Bluetooth and Safe to Remove menus are centered relative to the icon they are invoked from
* WiFi list now correctly toggles when clicking the Network icon in the taskbar
* The settings GUI now supports dark mode and switches correctly when the system theme changes
* The settings GUI draws correctly when themes are disabled (classic theme compatibility)
* Optionally uses DLL from StartAllBack (`StartAllBackX64.dll`) instead of StartIsBack(TBD) (which was called `StartIsBack64.dll`); the StartAllBack DLL has SHA-256: `D8D1484D6F7DE94C5018B03A5A93EE8BBB7795BCA5408A721CBB74BE28065689`
* Removed interoperability with StartAllBack or StartIsBack
## 22000.194.0.23

View File

@ -214,6 +214,7 @@
<ClInclude Include="GUI.h" />
<ClInclude Include="HideExplorerSearchBar.h" />
<ClInclude Include="hooking.h" />
<ClInclude Include="ep_private.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="SettingsMonitor.h" />
<ClInclude Include="StartMenu.h" />

View File

@ -57,6 +57,9 @@
<ClInclude Include="TaskbarCenter.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="ep_private.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="ExplorerPatcher.rc">

View File

@ -174,6 +174,17 @@ static BOOL GUI_Build(HDC hDC, HWND hwnd, POINT pt)
{
if (strcmp(line, "Windows Registry Editor Version 5.00\r\n") && strcmp(line, "\r\n"))
{
#ifndef USE_PRIVATE_INTERFACES
if (!strncmp(line, ";p ", 3))
{
int num = atoi(line + 3);
for (int i = 0; i < num; ++i)
{
getline(&line, &bufsiz, f);
}
}
#endif
if (!strncmp(line, "[", 1))
{
ZeroMemory(section, MAX_LINE_LENGTH * sizeof(wchar_t));

View File

@ -19,27 +19,10 @@
#include <valinet/pdb/pdb.h>
#define _LIBVALINET_DEBUG_HOOKING_IATPATCH
#include <valinet/hooking/iatpatch.h>
#include "utility.h"
#include "symbols.h"
#include "dxgi_imp.h"
#include "ArchiveMenu.h"
#include "StartupSound.h"
#include "SettingsMonitor.h"
#include "HideExplorerSearchBar.h"
#include "StartMenu.h"
#include "GUI.h"
#include "TaskbarCenter.h"
#define WINX_ADJUST_X 5
#define WINX_ADJUST_Y 5
#define SB_MICA_EFFECT_SUBCLASS_OFFSET 0x5BFC // 0x5C70
#define SB_INIT1 0x20054 // 0x26070
#define SB_INIT2 0x83A4 // Enable dark mode fixes
#define SB_TRACKPOPUPMENU_HOOK 0x1C774 // 0x21420
#define SB_TRACKPOPUPMENUEX_HOOK 0x1CB18 // 0x21920
#define SB_LOADIMAGEW_HOOK 0x3BEB0 // 0x4A6F0
#define CHECKFOREGROUNDELAPSED_TIMEOUT 100
#define POPUPMENU_SAFETOREMOVE_TIMEOUT 300
#define POPUPMENU_BLUETOOTH_TIMEOUT 700
@ -55,6 +38,21 @@ HMODULE hModule = NULL;
HANDLE hIsWinXShown = NULL;
HANDLE hWinXThread = NULL;
#include "utility.h"
#ifdef USE_PRIVATE_INTERFACES
#include "ep_private.h"
#endif
#include "symbols.h"
#include "dxgi_imp.h"
#include "ArchiveMenu.h"
#include "StartupSound.h"
#include "SettingsMonitor.h"
#include "HideExplorerSearchBar.h"
#include "StartMenu.h"
#include "GUI.h"
#include "TaskbarCenter.h"
#pragma region "Generics"
#define MIN(X, Y) (((X) < (Y)) ? (X) : (Y))
#define MAX(X, Y) (((X) > (Y)) ? (X) : (Y))
@ -795,7 +793,7 @@ BOOL TrackPopupMenuExHook(
#pragma endregion
#pragma region "Mica effect for Explorer and remove search bar"
#pragma region "Hide search bar in Explorer"
static HWND(*explorerframe_SHCreateWorkerWindowFunc)(
WNDPROC wndProc,
HWND hWndParent,
@ -824,17 +822,15 @@ HWND WINAPI explorerframe_SHCreateWorkerWindowHook(
);
if (dwExStyle == 0x10000 && dwStyle == 1174405120)
{
if (hStartIsBack64 && bMicaEffectOnTitlebar)
#ifdef USE_PRIVATE_INTERFACES
if (bMicaEffectOnTitlebar)
{
BOOL value = TRUE;
DwmSetWindowAttribute(hWndParent, DWMWA_MICA_EFFFECT, &value, sizeof(BOOL)); // Set Mica effect on title bar
SetWindowSubclass(
result,
(uintptr_t)hStartIsBack64 + SB_MICA_EFFECT_SUBCLASS_OFFSET,
(uintptr_t)hStartIsBack64 + SB_MICA_EFFECT_SUBCLASS_OFFSET,
0
);
SetPropW(hWndParent, L"NavBarGlass", HANDLE_FLAG_INHERIT);
DwmSetWindowAttribute(hWndParent, DWMWA_MICA_EFFFECT, &value, sizeof(BOOL));
SetWindowSubclass(result, ExplorerMicaTitlebarSubclassProc, ExplorerMicaTitlebarSubclassProc, 0);
}
#endif
if (bHideExplorerSearchBar)
{
SetWindowSubclass(hWndParent, HideExplorerSearchBarSubClass, HideExplorerSearchBarSubClass, 0);
@ -1331,6 +1327,48 @@ BOOL explorer_SetChildWindowNoActivateHook(HWND hWnd)
#pragma endregion
#pragma region "Hide Show desktop button"
LRESULT(*ShellTrayWndProcFunc)(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
);
LRESULT ShellTrayWndProcHook(
HWND hWnd,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch (uMsg)
{
case WM_DESTROY:
{
break;
}
case WM_ERASEBKGND:
{
HWND v33 = FindWindowExW(hWnd, 0, L"TrayNotifyWnd", 0);
HWND v34 = FindWindowExW(v33, 0, L"TrayShowDesktopButtonWClass", 0);
if (v34)
{
/*BYTE* lpShouldDisplayCCButton = (BYTE*)(GetWindowLongPtrW(v34, 0) + 120);
if (*lpShouldDisplayCCButton)
{
*lpShouldDisplayCCButton = FALSE;
}*/
//ShowWindow(v34, SW_HIDE);
}
break;
}
}
return ShellTrayWndProcFunc(hWnd, uMsg, wParam, lParam);
}
#pragma endregion
#pragma region "Notify shell ready (fixes delay at logon)"
DWORD SignalShellReady(DWORD wait)
{
@ -1382,6 +1420,13 @@ DWORD SignalShellReady(DWORD wait)
);
*/
PositionStartMenu(0, GetStartMenuPosition());
/*printf("hook show desktop\n");
void* ShellTrayWndProcFuncT = GetWindowLongPtrW(hWnd, GWLP_WNDPROC);
if (ShellTrayWndProcHook != ShellTrayWndProcFuncT)
{
ShellTrayWndProcFunc = ShellTrayWndProcFuncT;
SetWindowLongPtrW(hWnd, GWLP_WNDPROC, ShellTrayWndProcHook);
}*/
break;
}
}
@ -1538,6 +1583,7 @@ __declspec(dllexport) DWORD WINAPI main(
/*
TCHAR* wszSBPath = malloc((MAX_PATH + 1) * sizeof(TCHAR));
if (!wszSBPath)
{
@ -1561,7 +1607,7 @@ __declspec(dllexport) DWORD WINAPI main(
);
hStartIsBack64 = LoadLibraryW(wszSBPath);
free(wszSBPath);
*/
@ -1644,60 +1690,54 @@ __declspec(dllexport) DWORD WINAPI main(
HANDLE hStobject = LoadLibraryW(L"stobject.dll");
if (bSkinMenus)
{
if (1) // !hStartIsBack64
{
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenu", TrackPopupMenuHook);
}
else
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{
VnPatchDelayIAT(hStobject, "user32.dll", "TrackPopupMenu", (uintptr_t)hStartIsBack64 + SB_TRACKPOPUPMENU_HOOK);
}
}
if (bSkinIcons && hStartIsBack64)
{
VnPatchDelayIAT(hStobject, "user32.dll", "LoadImageW", (uintptr_t)hStartIsBack64 + SB_LOADIMAGEW_HOOK);
VnPatchDelayIAT(hStobject, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook);
}
#endif
printf("Setup stobject functions done\n");
HANDLE hBthprops = LoadLibraryW(L"bthprops.cpl");
if (bSkinMenus)
{
if (1) //!hStartIsBack64
{
VnPatchIAT(hBthprops, "user32.dll", "TrackPopupMenuEx", TrackPopupMenuExHook);
}
else
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{
VnPatchIAT(hBthprops, "user32.dll", "TrackPopupMenuEx", (uintptr_t)hStartIsBack64 + SB_TRACKPOPUPMENUEX_HOOK);
}
}
if (bSkinIcons && hStartIsBack64)
{
VnPatchIAT(hBthprops, "user32.dll", "LoadImageW", (uintptr_t)hStartIsBack64 + SB_LOADIMAGEW_HOOK);
VnPatchIAT(hBthprops, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook);
}
#endif
printf("Setup bthprops functions done\n");
HANDLE hPnidui = LoadLibraryW(L"pnidui.dll");
VnPatchIAT(hPnidui, "api-ms-win-core-com-l1-1-0.dll", "CoCreateInstance", pnidui_CoCreateInstanceHook);
if (bSkinIcons && hStartIsBack64)
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{
VnPatchIAT(hPnidui, "user32.dll", "LoadImageW", (uintptr_t)hStartIsBack64 + SB_LOADIMAGEW_HOOK);
VnPatchIAT(hPnidui, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook);
}
#endif
printf("Setup pnidui functions done\n");
HANDLE hSndvolsso = LoadLibraryW(L"sndvolsso.dll");
if (bSkinIcons && hStartIsBack64)
#ifdef USE_PRIVATE_INTERFACES
if (bSkinIcons)
{
VnPatchIAT(hSndvolsso, "user32.dll", "LoadImageW", (uintptr_t)hStartIsBack64 + SB_LOADIMAGEW_HOOK);
VnPatchIAT(hSndvolsso, "user32.dll", "LoadImageW", SystemTray_LoadImageWHook);
}
#endif
printf("Setup sndvolsso functions done\n");
@ -1718,7 +1758,7 @@ __declspec(dllexport) DWORD WINAPI main(
printf("Installed hooks.\n");
/*
if (hStartIsBack64)
{
((void(*)())((uintptr_t)hStartIsBack64 + SB_INIT1))();
@ -1727,7 +1767,7 @@ __declspec(dllexport) DWORD WINAPI main(
printf("Loaded and initialized StartIsBack64 DLL\n");
}
*/
HANDLE hEvent = CreateEventEx(

View File

@ -21,7 +21,8 @@
"HideControlCenterButton"=dword:00000000
;b Apply immersive style to system tray icon menus *
"SkinMenus"=dword:00000001
;b Apply Windows 11 style to system tray icons (requires StartAllBackX64.dll) *
;p 2
;b Apply Windows 11 style to system tray icons *
"SkinIcons"=dword:00000001
;T File Explorer
@ -37,7 +38,8 @@
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\ExplorerPatcher]
;b Hide search bar completely *
"HideExplorerSearchBar"=dword:00000000
;b Mica effect on title bar (requires StartAllBackX64.dll) *
;p 2
;b Mica effect on title bar *
"MicaEffectOnTitlebar"=dword:00000000
;T Start menu

View File

@ -1,5 +1,8 @@
#ifndef _H_UTILITY_H_
#define _H_UTILITY_H_
#if __has_include("ep_private.h")
#define USE_PRIVATE_INTERFACES
#endif
#include <Windows.h>
#include <tchar.h>
#include <windows.data.xml.dom.h>

View File

@ -27,11 +27,6 @@ In the [Releases](https://github.com/valinet/ExplorerPatcher/releases) section,
* disable the immersive contex menu system-wide
* disable the Windows 11 File Explorer command bar
Also, if you place the `StartAllBackX64.dll` file from StartAllback (needs a DLL with SHA-256: `D8D1484D6F7DE94C5018B03A5A93EE8BBB7795BCA5408A721CBB74BE28065689`) in the folder `%appdata%\ExplorerPatcher` (create if it does not exist), the following additional features will be enabled:
* option to apply Mica effect on File Explorer windows
* option to skin system tray icons to match Windows 11 style
After you have completed the above setup, make sure you have an active Internet connection and restart the Explorer process using Task Manager or by issuing the following command: `taskkill /f /im explorer.exe`. Once File Explorer restarts, some necessary files (symbol files) will be downloaded from Microsoft (around 50MB). This should be relatively quick, depending on your Internet connection speed. When this is done, File Explorer will restart again and will be ready for use. Notifications should show up informing you about the progress, and you can also use Task Manager to watch for network activity. This process only happens when a new Windows 11 build is installed on the machine.
Now, the classic taskbar should be enabled. Still, there is some more setup to do, depending on your preferences.