From b381f7a6fac161c9cc5d5a8a94b055b08db95a27 Mon Sep 17 00:00:00 2001 From: Akay Devel Coder <12538957+akaydev-coder@users.noreply.github.com> Date: Sat, 4 Jul 2026 16:26:43 +0200 Subject: [PATCH] Publish 1.5.79 stable --- CHANGELOG.md | 112 ++- CREDITS.md | 2 +- Installer/Bundle.wxs | 4 +- Installer/Installer.wxs | 6 +- Installer/config.ini | 13 + MinHook/libMinHook.vcxproj | 8 +- QTHookLib/ExplorerBackgroundRenderer.cpp | 734 ++++++++++++++++++ QTHookLib/ExplorerBackgroundRenderer.h | 21 + QTHookLib/QTHookLib.vcxproj | 4 + QTHookLib/ScopedBackgroundHooks.cpp | 189 +++++ QTHookLib/ScopedBackgroundHooks.h | 15 + QTHookLib/main.cpp | 76 +- QTTabBar/HookLibManager.cs | 89 ++- QTTabBar/ListViewMonitor.cs | 11 + QTTabBar/Properties/AssemblyInfo.cs | 4 +- QTTabBar/QTTabBarClass.cs | 4 + QTTabBar/QTUtility.cs | 2 +- QTTabBar/TaskbarTabPreviewManager.cs | 1 - README.md | 20 +- docs/releases/v1.5.64.0.md | 22 + docs/releases/v1.5.65.0.md | 18 + docs/releases/v1.5.66.0.md | 18 + docs/releases/v1.5.67.0.md | 17 + docs/releases/v1.5.68.0.md | 20 + docs/releases/v1.5.69.0.md | 19 + docs/releases/v1.5.70.0.md | 18 + native/QTTabBarNative/HookLibraryBridge.cpp | 102 ++- native/QTTabBarNative/HookLibraryBridge.h | 5 + native/QTTabBarNative/NativeExports.cpp | 29 + native/QTTabBarNative/QTTabBarNative.rc | 8 +- native/QTTabBarNative/QTTabBarNative.vcxproj | 13 + native/QTTabBarNative/QTTabBarNative_i.c | 4 +- native/QTTabBarNative/QTTabBarNative_i.h | 4 +- .../BackgroundRendererSmoke.vcxproj | 41 + .../Tests/BackgroundRendererSmoke/Smoke.cpp | 51 ++ 35 files changed, 1619 insertions(+), 85 deletions(-) create mode 100644 QTHookLib/ExplorerBackgroundRenderer.cpp create mode 100644 QTHookLib/ExplorerBackgroundRenderer.h create mode 100644 QTHookLib/ScopedBackgroundHooks.cpp create mode 100644 QTHookLib/ScopedBackgroundHooks.h create mode 100644 docs/releases/v1.5.64.0.md create mode 100644 docs/releases/v1.5.65.0.md create mode 100644 docs/releases/v1.5.66.0.md create mode 100644 docs/releases/v1.5.67.0.md create mode 100644 docs/releases/v1.5.68.0.md create mode 100644 docs/releases/v1.5.69.0.md create mode 100644 docs/releases/v1.5.70.0.md create mode 100644 native/Tests/BackgroundRendererSmoke/BackgroundRendererSmoke.vcxproj create mode 100644 native/Tests/BackgroundRendererSmoke/Smoke.cpp diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b35c2d..4c15048 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,116 @@ # Changelog +## 1.5.79.0 Stable - 2026-07-04 + +- Promotes the exact-window `BeginPaint`/`FillRect` Explorer background renderer to production. +- Removes periodic managed diagnostics, native paint counters, obsolete draw exports, and diagnostic build markers. +- Retains strict `DirectUIHWND` validation, safe hook rollback, crash reporting, and operational error logs. + +## 1.5.78.0 Diagnostic - 2026-07-04 + +- Replaces the overwritten `WM_ERASEBKGND` draw with process API detours matching the proven ExplorerBgTool paint order. +- Draws immediately after DirectUI's own `FillRect`, before folders, files, and labels are painted. +- Restricts rendering to HDCs resolved to exact registered `DirectUIHWND` instances and fully rolls back partial hook installation. + +## 1.5.77.0 Diagnostic - 2026-07-04 + +- Moves exact-window background rendering from the post-paint overlay to `WM_ERASEBKGND`. +- Draws after the default background erase and before Explorer paints folders, files, and labels. +- Uses the message-provided HDC, removes the post-paint redraw loop, and keeps all IAT hooks disabled. + +## 1.5.76.0 Diagnostic - 2026-07-04 + +- Fixes exact-window registration for the hook-free after-paint renderer by checking the initialized renderer state rather than the obsolete installed-hook state. +- Preserves the 1.5.75 exact `DirectUIHWND` rendering path with all background IAT hooks disabled. + +## 1.5.75.0 Diagnostic - 2026-07-03 + +- Replaces background-mode IAT interception with exact-window rendering dispatched by QTTabBar's existing `DirectUIHWND` after-paint message. +- Uses the WinSpy-confirmed registered file-list window and disables all scoped background IAT hooks. +- Adds after-paint render telemetry while retaining the WIC image loader and strict window validation. + +## 1.5.74.0 Diagnostic - 2026-07-03 + +- Extends the isolated background renderer to scoped `FillRect` and `CreateCompatibleDC` imports in `shell32` and `ExplorerFrame`. +- Adds per-module paint telemetry plus image/paint overlap and clip-region diagnostics. +- Retains exact registered-window filtering and avoids process-wide API hooks. + +## 1.5.73.0 Diagnostic - 2026-07-03 + +- Replaced the non-windowed `dui70!GetDC(NULL)` diagnostic path with scoped `shell32!BeginPaint` and `shell32!EndPaint` import hooks. +- Mirrors the reference renderer's DirectUI paint-DC association while retaining exact registered-window filtering. + +## 1.5.72.0 Diagnostic - 2026-07-03 + +- Replaced the unrelated `ExplorerFrame!BeginPaint` import hook with scoped `dui70!GetDC` and `dui70!ReleaseDC` import hooks. +- Associates only exact registered `DirectUIHWND` DCs with the background renderer. +- Retains delayed telemetry to verify DC resolution and alpha blending in the target Windows 10 VM. + +## 1.5.71.0 Diagnostic - 2026-07-03 + +- Added read-only native telemetry for the isolated Explorer background renderer. +- Logs delayed snapshots for `BeginPaint`, compatible DC propagation, `FillRect`, and `AlphaBlend` without changing hook targets or rendering behavior. +- Keeps 1.5.70.0 Stable as the rollback baseline. + +## 1.5.70.0 Stable - 2026-07-03 + +- Adds a scoped `ExplorerFrame.dll` `BeginPaint` import patch to capture the real + DirectUI paint DC without installing a process-wide hook +- Maps the captured paint DC to the already registered `DirectUIHWND` +- Keeps `FillRect` and `CreateCompatibleDC` patches limited to `dui70.dll` +- Retains the stable background-only state separation from 1.5.69 + +## 1.5.69.0 Stable - 2026-07-03 + +- Separates isolated background-renderer state from the legacy QTHookLib state +- Skips the invalid ShellBrowser-hook call in background-only mode +- Removes the additional `dui70.dll` `DeleteDC` patch not used by the reference implementation +- Replaces DeleteDC tracking with bounded, overwrite-on-create compatible-DC mapping + +## 1.5.68.0 Stable - 2026-07-03 + +- Removed `std::random_device` from Explorer background renderer construction +- Uses a deterministic renderer seed so startup does not enter platform entropy code +- Added phase diagnostics for singleton creation, configuration, image enumeration, + WIC decode, DIB creation, pixel copy, and state commit +- Logs the exact native renderer phase after both success and guarded failure + +## 1.5.67.0 Stable - 2026-07-03 + +- Replaced the background renderer's GDI+ decoder with Windows Imaging Component +- Removed `GdiplusStartup`, raw `LockBits` access and manual source-stride traversal +- Decodes PNG/BMP/JPEG directly into validated premultiplied `32bppPBGRA` DIB surfaces +- Addresses the renderer-stage access violation observed on Windows 10 22H2 build 19045.5679 +- Retains phased renderer/hook diagnostics and guarded `dui70.dll` activation + +## 1.5.66.0 Stable - 2026-07-03 + +- Hardened `dui70.dll` PE/import parsing for later Windows 10 22H2 servicing builds +- Bounded every descriptor, thunk and import-name read to the loaded module image +- Guarded native IAT reads and writes against structured exceptions +- Split renderer initialization from IAT activation for precise managed diagnostics +- Added native export guards so unsupported layouts return an error instead of terminating Explorer + +## 1.5.65.0 Stable - 2026-07-03 + +- Moved Explorer background ownership into the already loaded `QTTabBarNative.dll` +- Stopped loading the legacy monolithic `QTHookLib` in background-only mode +- Removed the background feature's file dependency on `QTHookLib32/64.dll` +- Preserved the three module-scoped `dui70.dll` import hooks and safe image renderer +- Added an architecture smoke test proving initialization succeeds with no legacy hook DLL + +## 1.5.64.0 Stable - 2026-07-03 + +- Replaced the legacy Explorer background path with an encapsulated renderer +- Removed MinHook entirely from background-only initialization +- Limited interception to three `dui70.dll` import slots and registered `DirectUIHWND` views +- Added validated immutable image snapshots and safe live configuration reloads +- Added correct premultiplied PNG alpha rendering and HDC lifecycle tracking +- Added window-property tokens to prevent reused HWND values from matching stale state +- Added configurable image directories, random selection and path-specific images +- Added ESC startup recovery while keeping legacy Shell hooks disabled by default +- Preserved native HRESULT diagnostics across the managed bridge + ## 1.5.62.0 Stable - 2026-07-02 - Consolidated the native and .NET Framework 4.8 QTTabBar code lines @@ -16,4 +127,3 @@ - Added isolated Explorer background rendering from `config.ini` - Improved Win+E capture, tab focus and toolbar persistence - Removed release debug paths and reduced success-log noise - diff --git a/CREDITS.md b/CREDITS.md index 90e38c0..ff189c7 100644 --- a/CREDITS.md +++ b/CREDITS.md @@ -14,10 +14,10 @@ QTTabBar Native Enhanced combines and extends work from several generations of Q - **Akay Devel Coder** - project owner, product direction, integration decisions, visual design and extensive Windows/VM testing - **OpenAI Codex** - major integration, debugging, native/managed implementation and release-engineering assistance under the project owner's direction +- **Maplespe / ExplorerBgTool** - inspiration for configurable and path-specific Explorer background images; this project uses an independently reworked renderer integrated with QTTabBar's targeted window registration The attribution list is intentionally open for correction and expansion as additional upstream history is identified. ## Third-party components This repository contains or references third-party components including MinHook, WiX build definitions and NotifyPropertyWeaver. Their original license and attribution terms continue to apply. - diff --git a/Installer/Bundle.wxs b/Installer/Bundle.wxs index 41d306c..048ae13 100644 --- a/Installer/Bundle.wxs +++ b/Installer/Bundle.wxs @@ -3,8 +3,8 @@ xmlns:bal="http://schemas.microsoft.com/wix/BalExtension" xmlns:netfx="http://schemas.microsoft.com/wix/NetFxExtension"> - diff --git a/Installer/Installer.wxs b/Installer/Installer.wxs index 73adb25..729de66 100644 --- a/Installer/Installer.wxs +++ b/Installer/Installer.wxs @@ -23,14 +23,14 @@ - - + + - +