Skip to content

OpenGlass DComp - Windhawk edition

Choose a tag to compare

@teknixstuff teknixstuff released this 11 Oct 20:38
· 7 commits to main since this release
cd0b75d
// ==WindhawkMod==
// @id              openglass-dcomp
// @name            OpenGlass DComp  - Windhawk edition
// @description     Aero Glass for W10 1809 - W11 23H2
// @version         1.3
// @author          Tech Stuff
// @github          https://github.com/teknixstuff
// @homepage        https://teknixstuff.com/
// @architecture    x86-64
// @include         dwm.exe
// @include         winlogon.exe
// ==/WindhawkMod==

// ==WindhawkModReadme==
/*
![header](https://raw.githubusercontent.com/ALTaleX531/OpenGlass/27ed85ea919c93f7fcfea8cdc4251b63762bc7e8/banner.png)
# OpenGlass
A replica of the dead software glass8, also known as the upstream project of [DWMBlurGlass](https://github.com/Maplespe/DWMBlurGlass).  
*/
// ==/WindhawkModReadme==

#include <errhandlingapi.h>
#include <libloaderapi.h>
#include <processenv.h>
#include <processthreadsapi.h>
#include <windhawk_api.h>
#include <windows.h>

HMODULE hOpenGlass;

BOOL Wh_ModInit() {
    Wh_Log(L"Init");

    WH_FIND_SYMBOL_OPTIONS symbolOptions;
    symbolOptions.optionsSize = sizeof(symbolOptions);
    symbolOptions.symbolServer = NULL;
    WH_FIND_SYMBOL symbol;
    HANDLE hSymbol;
    Wh_Log(L"Getting udwm.dll symbol");
    hSymbol = Wh_FindFirstSymbol(LoadLibrary(L"udwm.dll"), &symbolOptions, &symbol);
    Wh_FindCloseSymbol(hSymbol);
    Wh_Log(L"Getting dwmcore.dll symbol");
    hSymbol = Wh_FindFirstSymbol(LoadLibrary(L"dwmcore.dll"), &symbolOptions, &symbol);
    Wh_FindCloseSymbol(hSymbol);

    Wh_Log(L"Loading OpenGlass");
    hOpenGlass = LoadLibrary(L"C:\\programdata\\Windhawk\\Engine\\ModsWritable\\OpenGlassDComp3.dll");
    if (!hOpenGlass) {
        Wh_Log(L"Downloading OpenGlass");
        const WH_URL_CONTENT* OpenGlassFile = Wh_GetUrlContent(L"https://github.com/teknixstuff/misc-files/releases/download/OpenGlass-DComp-Windhawk/OpenGlassDComp3.dll", NULL);
        HANDLE hOpenGlassFile = CreateFile(L"C:\\programdata\\Windhawk\\Engine\\ModsWritable\\OpenGlassDComp3.dll", GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        DWORD lpNumberOfBytesWritten;
        WriteFile(hOpenGlassFile, OpenGlassFile->data, OpenGlassFile->length, &lpNumberOfBytesWritten, NULL);
        CloseHandle(hOpenGlassFile);
        Wh_FreeUrlContent(OpenGlassFile);
        Wh_Log(L"Loading OpenGlass");
        hOpenGlass = LoadLibrary(L"C:\\programdata\\Windhawk\\Engine\\ModsWritable\\OpenGlassDComp3.dll");
        if (!hOpenGlass) {
            Wh_Log(L"Could not load OpenGlass, error %X", GetLastError());
            return FALSE;
        }
    }

    if (!GetModuleHandle(L"dwm.exe")) {
        Wh_Log(L"Starting OpenGlass host thread");
        auto OpenGlassStartupService = GetProcAddress(hOpenGlass, "StartupService");
        if (OpenGlassStartupService) {
          CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)OpenGlassStartupService, NULL, 0, NULL);
        }
    }

    return TRUE;
}

// The mod is being unloaded, free all allocated resources.
void Wh_ModUninit() {
    Wh_Log(L"Uninit");
    if (!GetModuleHandle(L"dwm.exe")) {
        Wh_Log(L"Stopping OpenGlass host thread");
        auto OpenGlassShutdownService = GetProcAddress(hOpenGlass, "ShutdownService");
        if (OpenGlassShutdownService) {
          OpenGlassShutdownService();
        }
    }
    FreeLibrary(hOpenGlass);
}