Comment fonctionne Windhawk et pourquoi la modification de Windows est redevenue pratique
Quiconque a essayé de personnaliser Windows selon ses préférences s'est inévitablement heurté aux limitations du système. Windows 11 a supprimé des fonctionnalités familières de la barre des tâches, l'Explorateur modifie périodiquement son comportement, et une petite fonctionnalité nécessaire dans un programme tiers ne peut pas être configurée avec les outils intégrés. Auparavant, chaque correction nécessitait de rechercher des tweakers séparés, de patcher les bibliothèques système ou de télécharger des binaires douteux depuis des forums.
Le projet Windhawk a abordé la tâche sous un angle différent. Son concept ressemble à Tampermonkey pour les navigateurs ou Magisk pour les smartphones, mais fonctionne dans l'environnement des applications Windows classiques.

Qu'est-ce que Windhawk
Windhawk a été créé par le développeur m417z, connu dans la communauté des utilitaires système pour le projet 7+ Taskbar Tweaker. Contrairement aux anciens tweakers, qui étaient des utilitaires monolithiques, l'auteur a construit une plateforme ouverte ici.
L'essence est simple : il y a un moteur d'injection de code unifié et un catalogue de petits mods. Chaque mod résout un problème spécifique — restaure la barre des tâches classique, ajoute le ajustement du volume avec la molette de la souris sur la zone de notification, ou supprime les boutons inutiles de l'Explorateur.
Les utilisateurs voient une interface graphique soignée où ils peuvent activer la correction nécessaire d'un seul clic. Pour les développeurs, Windhawk ouvre un environnement complet de création de hooks C++ directement dans le programme, avec un éditeur de code intégré et une compilation instantanée.
Architecture et détails techniques
Le principal défi lors de la modification de programmes dans Windows est de s'assurer que le code est injecté à temps, fonctionne de manière stable et ne casse pas les processus voisins.

Dans le dépôt, le code source est divisé en trois composants principaux :
windhawk— le service systèmewindhawk.exe, ainsi que les bibliothèques 32 bits et 64 bitswindhawk.dllresponsables de l'injection globale et de l'interception de fonctions ;vscode-windhawk— le backend de l'interface gérant l'installation, les mises à jour et la configuration des mods ;vscode-windhawk-ui— le frontend basé sur les technologies web et l'éditeur Monaco, où les paramètres des mods sont configurés et le code est écrit.
Le moteur utilise l'interception globale et l'injection de DLL dans les processus cibles. Lorsqu'un programme couvert par les règles de modification est lancé, Windhawk injecte sa bibliothèque. Cette bibliothèque intercepte les appels de l'API Win32 ou les fonctions internes non documentées de l'application, remplaçant leur comportement par ce qui est décrit dans le mod.
Cette approche protège le système d'exploitation de la corruption. Les fichiers sur le disque ne sont pas modifiés, les bibliothèques système restent intactes et les vérifications d'intégrité sfc /scannow ne signalent pas d'erreurs. Si un mod commence à échouer après une mise à jour de Windows, vous pouvez simplement le désactiver dans l'interface ou démarrer le système en mode sans échec.
Comment les mods sont écrits
L'écriture de modifications ne nécessite pas de configurer un Visual Studio lourd avec tous les SDK système. Windhawk télécharge la chaîne d'outils du compilateur nécessaire en arrière-plan.
Le code source d'un mod est un fichier C++ avec des métadonnées spéciales dans les commentaires, similaire aux userscripts de navigateur :
// ==WindhawkMod==
// @id custom-window-title
// @name Custom Window Title
// @description Изменяет заголовок окна блокнота
// @version 1.0
// @include notepad.exe
// ==/WindhawkMod==
#include <windhawk_api.h>
typedef HWND (WINAPI *CreateWindowExW_t)(
DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam
);
CreateWindowExW_t pOriginalCreateWindowExW;
HWND WINAPI Hook_CreateWindowExW(
DWORD dwExStyle, LPCWSTR lpClassName, LPCWSTR lpWindowName,
DWORD dwStyle, int X, int Y, int nWidth, int nHeight,
HWND hWndParent, HMENU hMenu, HINSTANCE hInstance, LPVOID lpParam
) {
if (lpWindowName && wcscmp(lpWindowName, L"Untitled - Notepad") == 0) {
lpWindowName = L"Мой кастомный блокнот";
}
return pOriginalCreateWindowExW(dwExStyle, lpClassName, lpWindowName, dwStyle, X, Y, nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam);
}
BOOL Wh_ModInit() {
Wh_Log(L"Инициализация мода");
HMODULE hUser32 = GetModuleHandle(L"user32.dll");
void* pCreateWindowExW = (void*)GetProcAddress(hUser32, "CreateWindowExW");
Wh_SetFunctionHook(pCreateWindowExW, (void*)Hook_CreateWindowExW, (void**)&pOriginalCreateWindowExW);
return TRUE;
}
Le mod est compilé directement dans l'application. Le moteur surveille les modifications de fichiers et recharge la bibliothèque dynamique dans le processus cible sans avoir besoin de redémarrer le système d'exploitation.
Avantages pratiques
L'outil aborde plusieurs scénarios qui nécessitaient auparavant des solutions de contournement.
Tout d'abord, le ajustement fin de l'interface de l'Explorateur et de la barre des tâches. Des mods sont disponibles pour modifier la hauteur de la barre des tâches, masquer les éléments de menu contextuel inutiles, basculer les onglets avec la molette de la souris et personnaliser la zone de notification.
Deuxièmement, la correction du comportement ennuyeux des logiciels tiers. Si un programme manque de raccourci clavier ou si sa fenêtre ne se minimise pas dans la zone de notification par défaut, vous pouvez écrire un hook pour user32.dll ou win32u.dll et redéfinir le traitement des messages de fenêtre.
Troisièmement, c'est une excellente base pour le reverse engineering. Si vous étudiez les internes des applications Windows, Windhawk simplifie les expériences avec l'interception de fonctions, la journalisation des paramètres et les tests d'hypothèses.
Nuances et limitations
Lors du travail avec l'injection globale, il est important de prendre en compte les spécificités des logiciels de sécurité. Les programmes antivirus réagissent parfois à l'interception de fonctions dans les processus système, bien que les exécutables du projet aient une signature numérique valide.
L'écriture de mods complexes pour les interfaces non documentées de l'Explorateur nécessite toujours des compétences en reverse engineering et une compréhension de l'utilisation de débogueurs comme x64dbg ou IDA Pro. Les interfaces Windows changent souvent d'une version à l'autre, donc les auteurs doivent maintenir les signatures de fonctions pour différentes versions de bibliothèques.
Cela vaut-il la peine d'essayer
Windhawk a transformé le monde fragmenté des tweaks Windows en un environnement structuré et transparent. Le projet est écrit en C++ et Rust, distribué sous la licence GPL-3.0, et dispose d'une communauté de développeurs active.
Si vous regrettez les fonctionnalités familières de Windows 11, le projet mérite d'être installé au moins pour le catalogue de mods prêts à l'emploi. Et pour les développeurs C++ interesados par l'API Win32 de bas niveau, le code source du dépôt montrera de nombreuses techniques pratiques pour l'injection de bibliothèques et le hooking.
Projets similaires