Jak działa Windhawk i dlaczego modyfikowanie Windowsa znów stało się wygodne
Każdy, kto próbował dostosować Windows do swoich preferencji, nieuchronnie napotkał ograniczenia systemowe. Windows 11 usunął znajome funkcje paska zadań, Eksplorator okresowo zmienia swoje zachowanie, a potrzebna funkcja w programie zewnętrznym nie może być skonfigurowana za pomocą wbudowanych narzędzi. Wcześniej każda taka poprawka wymagała wyszukiwania osobnych narzędzi do dostrajania, łatania bibliotek systemowych lub pobierania wątpliwych plików binarnych z forów.
Projekt Windhawk podszedł do tego zadania z innej strony. Jego idea przypomina Tampermonkey dla przeglądarek lub Magisk dla smartfonów, ale działa w środowisku klasycznych aplikacji Windows.

Czym jest Windhawk
Windhawk został stworzony przez dewelopera m417z, znanego w społeczności narzędzi systemowych dzięki projektowi 7+ Taskbar Tweaker. W przeciwieństwie do starych narzędzi dostrajania, które były monolitycznymi programami, autor zbudował tutaj otwartą platformę.
Istota jest prosta: istnieje ujednolicony silnik wstrzykiwania kodu i katalog małych modów. Każdy mod rozwiązuje konkretny problem — przywraca klasyczny pasek zadań, dodaje regulację głośności kółkiem myszy nad tacką systemową lub usuwa niepotrzebne przyciski z Eksploratora.
Użytkownicy widzą przejrzysty interfejs graficzny, w którym mogą włączyć potrzebną poprawkę jednym kliknięciem. Dla deweloperów Windhawk otwiera pełnoprawne środowisko do tworzenia haków w C++ wbudowane bezpośrednio w program, z wbudowanym edytorem kodu i natychmiastową kompilacją.
Architektura i szczegóły techniczne
Głównym wyzwaniem przy modyfikowaniu programów w Windows jest zapewnienie, że kod zostanie wstrzyknięty na czas, działa stabilnie i nie psuje sąsiednich procesów.

W repozytorium kod źródłowy podzielony jest na trzy główne komponenty:
windhawk— usługa systemowawindhawk.exe, a także 32-bitowe i 64-bitowe bibliotekiwindhawk.dllodpowiedzialne za globalne wstrzykiwanie i przechwytywanie funkcji;vscode-windhawk— backend interfejsu zarządzający instalacją modów, aktualizacjami i konfiguracją;vscode-windhawk-ui— frontend oparty na technologiach webowych i edytorze Monaco, gdzie konfigurowane są parametry modów i pisany jest kod.
Silnik wykorzystuje globalne przechwytywanie i wstrzykiwanie DLL do docelowych procesów. Gdy uruchamiany jest program objęty regułami modyfikacji, Windhawk wstrzykuje swoją bibliotekę. Biblioteka ta przechwytuje wywołania Win32 API lub wewnętrzne niedokumentowane funkcje aplikacji, zastępując ich zachowanie tym, co opisano w modzie.
To podejście chroni system operacyjny przed uszkodzeniem. Pliki na dysku nie są modyfikowane, biblioteki systemowe pozostają nietknięte, a kontrole integralności sfc /scannow nie zgłaszają błędów. Jeśli jakiś mod przestanie działać po aktualizacji Windows, można go po prostu wyłączyć w interfejsie lub uruchomić system w trybie awaryjnym.
Jak pisane są mody
Pisanie modyfikacji nie wymaga konfigurowania ciężkiego Visual Studio ze wszystkimi SDK systemowymi. Windhawk pobiera niezbędny łańcuch narzędzi kompilatora w tle.
Kod źródłowy moda to plik C++ ze specjalnymi metadanymi w komentarzach, podobnie jak skrypty użytkownika w przeglądarce:
// ==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;
}
Mod jest kompilowany bezpośrednio w aplikacji. Silnik monitoruje zmiany plików i przeładowuje bibliotekę dynamiczną w procesie docelowym bez potrzeby restartowania systemu operacyjnego.
Praktyczne korzyści
Narzędzie rozwiązuje kilka scenariuszy, które wcześniej wymagały obejść.
Po pierwsze, precyzyjne dostrajanie interfejsu Eksploratora i paska zadań. Dostępne są mody do zmiany wysokości paska zadań, ukrywania niepotrzebnych elementów menu kontekstowego, przełączania kart kółkiem myszy i dostosowywania tacki systemowej.
Po drugie, naprawianie irytującego zachowania oprogramowania zewnętrznego. Jeśli program nie ma przypisanego skrótu klawiszowego lub jego okno nie jest domyślnie minimalizowane do tacki, można napisać hak dla user32.dll lub win32u.dll i przedefiniować obsługę komunikatów okna.
Po trzecie, to doskonała baza do inżynierii odwrotnej. Jeśli studiujesz wewnętrzne działanie aplikacji Windows, Windhawk upraszcza eksperymenty z przechwytywaniem funkcji, logowaniem parametrów i testowaniem hipotez.
Niuansy i ograniczenia
Pracując z globalnym wstrzykiwaniem, należy wziąć pod uwagę specyfikę oprogramowania zabezpieczającego. Programy antywirusowe czasami reagują na przechwytywanie funkcji w procesach systemowych, chociaż pliki wykonywalne projektu mają ważny podpis cyfrowy.
Pisanie złożonych modów dla niedokumentowanych interfejsów Eksploratora nadal wymaga umiejętności inżynierii odwrotnej i zrozumienia korzystania z debugerów takich jak x64dbg czy IDA Pro. Interfejsy Windows często zmieniają się między kompilacjami, więc autorzy muszą utrzymywać sygnatury funkcji dla różnych wersji bibliotek.
Czy warto spróbować
Windhawk przekształcił pofragmentowany świat poprawek Windows w uporządkowane i przejrzyste środowisko. Projekt jest napisany w C++ i Rust, dystrybuowany na licencji GPL-3.0 i ma aktywną społeczność deweloperów.
Jeśli tęsknisz za znajomymi funkcjami w Windows 11, projekt warto zainstalować przynajmniej dla gotowego katalogu modów. A dla deweloperów C++ zainteresowanych niskopoziomowym Win32 API, kod źródłowy repozytorium pokaże wiele praktycznych technik wstrzykiwania bibliotek i hakowania.
Powiązane projekty