|
Post by sevenclassic on Jul 24, 2024 13:16:17 GMT -8
Hello, I'm a new member. Apologies if this subject is already covered in the forum. Anyway, I've been looking for extended ways to modify W10's gui colors, to make it more eye-friendly(at least for me).
I still use W7 as a daily driver, as it just works. I don't have to think about the OS, when doing different tasks with it. Its classic theme colors(although I've changed them just a bit for personal preference) are just so clear.
So, to the actual subject, modding W10's colors. I've found that there isn't much info on the net, of how to do it, other than applying some serious mods. I've tried many of them, and there seems to be always a risk of breaking some of W10's functions. And I don't intend to demean ones that use such mods. It's actually quite amazing to see what people are able to do, be it programming or modding.
I got tired of looking and changing color values in the registry, as they don't seem to do much at all. Some of them are there perhaps for backward compatibility.
Then, for some reason, I began to look for msstyles files(especially aerolite, as it's I guess what windows uses, when all animations and decorations are disabled).
By using Resource Hacker, there is a png file called STREAM777, which contains areas, where window title bar (active/inactive) color can be edited, among others, like minimize, restore and close buttons' backgrounds and icons.
W10 version, that I'm using for testing is 21H2 Ltsc in Oracle VM. Besides Resource Hacker, I use SecureUXTheme and version 8 of Paint Shop Pro(yeah, it still works just fine on W7 and W10, but has some hickups in the W10 VM).
Any thoughts would be appreciated.
|
|
|
Post by OrthodoxWin32 on Aug 7, 2024 15:07:30 GMT -8
Your visual style seems successful, well done! I'm glad someone is working on Aerolite, it's an interesting but underrated theme. To make the buttons square, you can use this Windhawk mod:
To change the colors and the classic metric, you can use this tool: {Mod code}
// ==WindhawkMod== // @id restore-classic-caption-buttons // @name Square Caption Buttons (was 8.X Caption buttons) // @description This mod restores the caption buttons to their original lengths and heights in Windows Classic and XP. Works on Windows 10 21H2 (LTSC 2021). // @version 0.1 // @author Dulappy // @github https://github.com/Dulappy // @include dwm.exe // @architecture x86-64 // @compilerOptions -ldwmapi -lgdi32 -ld2d1 -ldxguid -lcomdlg32 -lwindowscodecs // ==/WindhawkMod==
// ==WindhawkModReadme== /* # Placeholder */ // ==/WindhawkModReadme==
#include <windef.h> #include <wingdi.h> #include <dwmapi.h> #include <D3D9Types.h> #include <d2d1effects.h> #include <winuser.h> #include <math.h> #include <wincodec.h>
#define ID_CLOSE 3 #define ID_MAXRES 2 #define ID_MIN 1
#define STATE_MAXIMIZED 4
#define TYPE_TOOL 2
int (WINAPI *GetSystemMetricsForDpiOrig)(int nIndex, UINT dpi); int WINAPI GetSystemMetricsForDpiHook(int nIndex, UINT dpi) { return GetSystemMetricsForDpiOrig(nIndex, dpi); }
/* =============================================================================== */
typedef void (*CTopLevelWindow_UpdatePinnedParts_t)(void* pThis); CTopLevelWindow_UpdatePinnedParts_t CTopLevelWindow_UpdatePinnedParts_Original;
typedef void (*CVisual_SetInsetFromParentTop_t)(void* pThis, int inset); CVisual_SetInsetFromParentTop_t CVisual_SetInsetFromParentTop_Original;
typedef void (*CVisual_SetInsetFromParentLeft_t)(void* pThis, int inset); CVisual_SetInsetFromParentLeft_t CVisual_SetInsetFromParentLeft_Original;
typedef void (*CVisual_SetDirtyFlags_t)(void* pThis, int flag); CVisual_SetDirtyFlags_t CVisual_SetDirtyFlags_Original;
typedef void (*CVisual_SetInsetFromParent_t)(void* pThis, struct _MARGINS const *); CVisual_SetInsetFromParent_t CVisual_SetInsetFromParent_Original;
typedef void (*CText_SetSize_t)(void* pThis, struct tagSIZE const *); CText_SetSize_t CText_SetSize_Original;
typedef void (*CSolidColorLegacyMilBrushProxy_Update_t)(void* pThis, double alpha, struct _D3DCOLORVALUE const *); CSolidColorLegacyMilBrushProxy_Update_t CSolidColorLegacyMilBrushProxy_Update_Original;
typedef void (*MilInstrumentationCheckHR_MaybeFailFast_t)(unsigned long, long const * const, unsigned int, long, unsigned int, void*); MilInstrumentationCheckHR_MaybeFailFast_t MilInstrumentationCheckHR_MaybeFailFast_Original;
typedef long (*CCompositor_CreateMilBrushProxy_t)(__int64, long **); CCompositor_CreateMilBrushProxy_t CCompositor_CreateMilBrushProxy_Original;
typedef long (*CCompositor_CreateMatrixTransformProxy_t)(__int64, char*); CCompositor_CreateMatrixTransformProxy_t CCompositor_CreateMatrixTransformProxy_Original;
typedef long (*CPushTransformInstruction_Create_t)(__int64*, volatile int**); CPushTransformInstruction_Create_t CPushTransformInstruction_Create_Original;
typedef long (*CRenderDataVisual_AddInstruction_t)(void* pThis, volatile signed __int32 *); CRenderDataVisual_AddInstruction_t CRenderDataVisual_AddInstruction_Original;
typedef long (*CBitmapSource_Create_t)(struct IWICBitmap*, const struct _MARGINS*, long long **); CBitmapSource_Create_t CBitmapSource_Create_Original;
typedef long (*CDrawImageInstruction_Create_t)(long long*, const struct tagRECT*, volatile int **); CDrawImageInstruction_Create_t CDrawImageInstruction_Create_Original;
typedef long (*CPopInstruction_Create_t)(volatile int **); CPopInstruction_Create_t CPopInstruction_Create_Original;
typedef void (*CTopLevelWindow_GetAccentBlurBehindBrush_t)(void*, long long**, long long**, void*); CTopLevelWindow_GetAccentBlurBehindBrush_t CTopLevelWindow_GetAccentBlurBehindBrush_Original;
typedef void (*CTopLevelWindow_OnAccentPolicyUpdated_t)(void*); CTopLevelWindow_OnAccentPolicyUpdated_t CTopLevelWindow_OnAccentPolicyUpdated_Original;
typedef void (*CText_ReleaseResources_t)(void* pThis); CText_ReleaseResources_t CText_ReleaseResources_Original;
long long* DesktopManagerInstance = nullptr;
bool (*CButton__UpdateCurrentGlyphOpacity_Original)(void *, bool);
bool CButton__UpdateCurrentGlyphOpacity_Hook(void *pThis, bool b) { *((float *)pThis + 101) = 1.0f; return CButton__UpdateCurrentGlyphOpacity_Original(pThis, b); }
long long (*CButton_DrawStateW_Original)(void* pThis, void* CAtlasButton, UINT ButtonState);
long long CButton_DrawStateW_Hook(void* pThis, void* CAtlasButton, UINT ButtonState) { /*Wh_Log(L"We runnin"); if (ButtonState!=4 && *(DWORD *)((long long)pThis + 328) >= 4u) { Wh_Log(L"We runnin but inside"); long long v10 = 1; if ((*(BYTE *)((long long)pThis + 280) & 0x10) == 0) { v10 = ButtonState; } if ( *(DWORD *)((long long)pThis + 360) >= 4u ) { Wh_Log(L"We runnin but double inside"); *(long long *)((long long)pThis + 368) = *(long long *)(*(long long *)((long long)pThis + 336) + 8 * v10); } }*/
return CButton_DrawStateW_Original(pThis, CAtlasButton, ButtonState); }
long (*CTopLevelWindow_UpdateMarginsDependentOnStyle_Original)(void* pThis);
long CTopLevelWindow_UpdateMarginsDependentOnStyle_Hook(void* pThis) { long retvalue = CTopLevelWindow_UpdateMarginsDependentOnStyle_Original(pThis); //long retvalue = 0;
long long CVisualInstance = *((long long *)pThis + 91);
MARGINS somemargins = *(struct _MARGINS *)(CVisualInstance + 280); //Wh_Log(L"%i", *((DWORD *)pThis + 19));
// DesktopManagerInstance + 60 CONTROLS SOMETHING RELATED TO VISUAL BORDER SIZE double v9 = *((double*)*DesktopManagerInstance + 60); // THIS IS HOW YOU USE DESKTOPMANAGERINSTANCE //Wh_Log(L"%llu", v9);
return retvalue; }
long (*CText_ValidateResources_Original)(void* pThis);
long CText_ValidateResources_Hook(void* pThis) { //return 0; long retvalue = CText_ValidateResources_Original(pThis); //long retvalue = 0; /*DWORD v1 = *((DWORD *)pThis + 20); if ((v1 & 0x1000)) { CText_ReleaseResources_Original(pThis); if ( *((unsigned long long *)pThis + 36) ) { long long* v10 = (long long*)*((long long*)*DesktopManagerInstance + 33); if (v10) { HDC hdc = (HDC)*((long long *)v10 + 13); if (hdc) { HBITMAP Bitmap = CreateBitmap(512, 30, 1u, 32, 0); if (Bitmap) { SelectObject(hdc, Bitmap); RECT fillbox; fillbox.left = 0; fillbox.right = 512; fillbox.top = 0; fillbox.bottom = 30; HBRUSH Brush = CreateSolidBrush(RGB(3, 48, 124)); FillRect(hdc, &fillbox, Brush); GdiFlush(); IWICImagingFactory* ImagingFactory = *((IWICImagingFactory**)*DesktopManagerInstance + 39); IWICBitmap* newBitmap; ImagingFactory->CreateBitmapFromHBITMAP(Bitmap, 0, WICBitmapIgnoreAlpha, &newBitmap); WICPixelFormatGUID test1; newBitmap->GetPixelFormat(&test1); Wh_Log(L"%i", test1.Data1); Wh_Log(L"%i", test1.Data2); Wh_Log(L"%i", test1.Data3); Wh_Log(L"%llu", test1.Data4); CCompositor_CreateMatrixTransformProxy_Original(*((long long *)*DesktopManagerInstance + 5), (char *)pThis + 392); volatile int * createdInstruction = 0; CPushTransformInstruction_Create_Original(*((long long **)pThis + 49), &createdInstruction); CRenderDataVisual_AddInstruction_Original(pThis, createdInstruction);
long long * CBitmapSource = 0; MARGINS test; test.cxLeftWidth = 8; test.cxRightWidth = 8; test.cyBottomHeight = 8; test.cyTopHeight = 8; CBitmapSource_Create_Original(newBitmap, 0, &CBitmapSource); // CRASHES DWM Wh_Log(L"does this run1?"); volatile int* CDrawImageInstruction = 0; CDrawImageInstruction_Create_Original(CBitmapSource, &fillbox, &CDrawImageInstruction);
CRenderDataVisual_AddInstruction_Original(pThis, CDrawImageInstruction); volatile int* CPopInst = 0; CPopInstruction_Create_Original(&CPopInst); CRenderDataVisual_AddInstruction_Original(pThis, CPopInst); Wh_Log(L"does this run2?"); } } } } *((DWORD *)pThis + 20) &= ~0x1000u; }*/ //long retvalue = 0; return retvalue; }
long (*CTopLevelWindow_UpdateColorizationColor_Original)(void* pThis);
long CTopLevelWindow_UpdateColorizationColor_Hook(void* pThis) { return CTopLevelWindow_UpdateColorizationColor_Original(pThis); }
void (*CText_SetBackgroundColor_Original)(void* pThis, unsigned long color);
void CText_SetBackgroundColor_Hook(void* pThis, unsigned long color) { return CText_SetBackgroundColor_Original(pThis, color); }
long (*CTopLevelWindow_UpdateNCAreaBackground_Original)(void* pThis);
long CTopLevelWindow_UpdateNCAreaBackground_Hook(void* pThis) { //Wh_Log(L"%i", (int)*((double *)*DesktopManagerInstance + 60)); //*((double *)*DesktopManagerInstance + 60) = 1; /*Wh_Log(L"%i", *((DWORD *)pThis + 154));
RECT rc = *(struct tagRECT *)(*((long long *)pThis + 91) + 48); Wh_Log(L"%i", rc.left); Wh_Log(L"%i", rc.right); Wh_Log(L"%i", rc.top); Wh_Log(L"%i", rc.bottom);*/
//*((DWORD *)pThis + 157) = -20;
long retvalue = CTopLevelWindow_UpdateNCAreaBackground_Original(pThis); float *colorData = (float *)*((long long *)pThis + 73);
struct _D3DCOLORVALUE color; color.a = 0.5; color.b = colorData[6]; color.g = colorData[5]; color.r = colorData[4]; //Wh_Log(L"%i", *(DWORD *)(*((long long *)pThis + 91) + 152)); /*float v28[4]; v28[0] = 1.0; v28[1] = 1.0; v28[2] = 1.0; long long *v24; long long *v25; v24 = 0; v25 = 0;*/ //CTopLevelWindow_GetAccentBlurBehindBrush_Original(pThis, &v24, &v25, &v28);
return retvalue; }
long (*CVisual_SetSize_Original)(PVOID pThis, struct tagSIZE const *);
long CVisual_SetSize_Hook(PVOID pThis, struct tagSIZE* size) { return CVisual_SetSize_Original(pThis, size); }
long (*CTopLevelWindow_UpdateNCAreaButton_Original)(__int64, int, int, int, int*);
long CTopLevelWindow_UpdateNCAreaButton_Hook(__int64 pThis, int buttonId, int height, int offsetTop, int* offsetRight) { typedef DWORD CVisual;
if ( !*(CVisual *)(pThis + 488 + 8 * buttonId) ) { // if this button doesn't exist on the window, return. return 0; }
__int64 DPIValue = *(unsigned int *)(*(__int64 *)(pThis + 728) + 324);
// WINDOWS 7 HEIGHT CALCULATION!!! KEPT HERE FOR FUTURE REFERENCE //height = floor((float)(GetSystemMetricsForDpiHook((int)31, (UINT)DPIValue)) * 0.95238096) + 0.5;
bool isTool; int TBHeight; int width; if ( (*(BYTE *)(pThis + 592) & TYPE_TOOL) != 0 ) { isTool = TRUE; TBHeight = GetSystemMetricsForDpiHook((int)53, (UINT)DPIValue); } else { isTool = FALSE; TBHeight = GetSystemMetricsForDpiHook((int)31, (UINT)DPIValue); }
if (isTool) { height = TBHeight; width = height; } else { //height = floor((float)((float)TBHeight * 21 / 22) + 0.5); height = floor((float)((float)TBHeight * 23 / 22) + 2.0);
if (buttonId==ID_CLOSE && (*(DWORD *)(pThis + 592) & 0xB00) != 0 ) { width = floor((float)((float)TBHeight * 23 / 22) + 2.0); //width = floor((float)((float)TBHeight * 47 / 22) + 0.5); } else if (buttonId==ID_CLOSE && (*(DWORD *)(pThis + 592) & 0xB00) == 0 ) { //width = floor((float)((float)TBHeight * 24 / 22) + 0.5); width = floor((float)((float)TBHeight * 23 / 22) + 2.0); } else if ((buttonId != ID_MIN || *(long long *)(pThis + 488)) && buttonId) { width = floor((float)((float)TBHeight * 23 / 22) + 1.0); //width = floor((float)((float)TBHeight * 26 / 22) + 0.5); } else { width = floor((float)((float)TBHeight * 23 / 22) + 1.0); //width = floor((float)((float)TBHeight * 29 / 22) + 0.5); } } CVisual *buttonData; buttonData = *(CVisual**)(pThis + 8 * buttonId + 488); // this fetches the address where all the data for the specific button is stored
struct tagSIZE size; size.cx = width; size.cy = height;
CVisual_SetInsetFromParentTop_Original(*(CVisual**)(pThis + 8 * buttonId + 488), offsetTop);
if (buttonData[33] != *offsetRight) { buttonData[33] = *offsetRight; CVisual_SetDirtyFlags_Original(buttonData, 2); buttonData = *(CVisual**)(pThis + 8 * buttonId + 488); }
long retnvalue = CVisual_SetSize_Original(buttonData, &size); if (retnvalue < 0) { MilInstrumentationCheckHR_MaybeFailFast_Original(0x14u, 0, 0, retnvalue, 0xC5Cu, 0); } else { *offsetRight += buttonData[30]; }
return retnvalue; }
long (*CTopLevelWindow_UpdateNCAreaPositionsAndSizes_Original)(void* pThis);
long CTopLevelWindow_UpdateNCAreaPositionsAndSizes_Hook(void *pThis) {
bool isMaximized = *((BYTE *)pThis + 240) & STATE_MAXIMIZED; bool isTool = *((BYTE *)pThis + 592) & TYPE_TOOL;
if (*((long long *)pThis + 60)) { DWORD *clientData = (DWORD *)*((long long *)pThis + 68);
int insetLeft = *((DWORD *)pThis + 149); if (clientData[32] != insetLeft) { clientData[32] = insetLeft; CVisual_SetDirtyFlags_Original(clientData, 2); } int insetTop = *((DWORD *)pThis + 151); if (clientData[34] != insetTop) { clientData[34] = insetTop; CVisual_SetDirtyFlags_Original(clientData, 2); } int insetRight = *((DWORD *)pThis + 150); if (clientData[33] != insetRight) { clientData[33] = insetRight; CVisual_SetDirtyFlags_Original(clientData, 2); } int insetBottom = *((DWORD *)pThis + 152); if (clientData[35] != insetBottom) { clientData[35] = insetBottom; CVisual_SetDirtyFlags_Original(clientData, 2); } long *unknown = (long *)*((long long *)pThis + 37); if (unknown) { CVisual_SetInsetFromParent_Original(unknown, (const struct _MARGINS *)(*((long long *)pThis + 68) + 128)); } }
int insetRightNormal = *((DWORD *)pThis + 150); if (insetRightNormal <= 0) { // this+91 contains window data insetRightNormal = *(long long *)(*((long long *)pThis + 91) + 96); } long *borderSizeArray; if (isMaximized) { borderSizeArray = (long *)((char *)pThis + 644); } else { borderSizeArray = (long *)((char *)pThis + 628); }
int insetRight; if (insetRightNormal - 2 <= borderSizeArray[1] + 2) { insetRight = borderSizeArray[1] + 2; } else { insetRight = insetRightNormal - 2; } int insetLeft = *((DWORD *)pThis + 149);
__int64 DPIValue = *(unsigned int *)(*((long long *)pThis + 91) + 324);
int height; if (isTool) { height = GetSystemMetricsForDpiHook(53, DPIValue); } else { height = floor((float)(GetSystemMetricsForDpiHook((int)31, (UINT)DPIValue)) * 0.95238096) + 0.5; }
int insetTop = borderSizeArray[2]; if (isTool) { if (*((DWORD *)pThis + 151) - height - 4 > insetTop) { insetTop = *((DWORD *)pThis + 151) - height - 4; } insetRight++; } else if (isMaximized) { insetTop--; } else { insetTop++; }
CTopLevelWindow_UpdateNCAreaButton_Hook((long long)pThis, 3, height, insetTop, &insetRight); CTopLevelWindow_UpdateNCAreaButton_Hook((long long)pThis, 2, height, insetTop, &insetRight); CTopLevelWindow_UpdateNCAreaButton_Hook((long long)pThis, 1, height, insetTop, &insetRight); CTopLevelWindow_UpdateNCAreaButton_Hook((long long)pThis, 0, height, insetTop, &insetRight);
bool hasIcon = (__int64 *)*((long long *)pThis + 66); if (hasIcon) { __int64 someData = *((long long *)pThis + 91); int width; int height; if (*(long long *)(someData + 136) || (*((long *)pThis + 148) & 0x10000) == 0) { width = GetSystemMetricsForDpiHook(49, *(unsigned int *)(someData + 324)); height = GetSystemMetricsForDpiHook(50, *(unsigned int *)(*((long long *)pThis + 91) + 324)); } else { width = 0; height = 0; } long long *iconData; iconData = (__int64 *)*((long long *)pThis + 66);
struct tagSIZE size; size.cx = width; size.cy = height; long retnvalue = CVisual_SetSize_Original(iconData, &size); if (retnvalue < 0) { MilInstrumentationCheckHR_MaybeFailFast_Original(0x14u, 0, 0, retnvalue, 0xC08u, 0); return (unsigned int)retnvalue; }
int insetTop = borderSizeArray[2] + (*((DWORD *)pThis + 151) - *(DWORD *)(*((long long *)pThis + 66) + 124) - borderSizeArray[2]) / 2;
CVisual_SetInsetFromParentTop_Original(iconData, insetTop); CVisual_SetInsetFromParentLeft_Original(iconData, insetLeft);
long iconWidth = *(long *)(*((long long *)pThis + 66) + 120);
if (iconWidth > 0) { insetLeft += iconWidth + 5; } } bool hasText = (DWORD *)*((long long *)pThis + 65); if (hasText) { DWORD *textData; textData = (DWORD *)*((long long *)pThis + 65); CVisual_SetInsetFromParentTop_Original(textData, borderSizeArray[2]); CVisual_SetInsetFromParentLeft_Original(textData, insetLeft); if ( textData[33] != insetRight ) { textData[33] = insetRight; CVisual_SetDirtyFlags_Original(textData, 2); } struct tagSIZE size; size.cx = textData[30]; size.cy = *((DWORD *)pThis + 151) - borderSizeArray[2]; CText_SetSize_Original(textData, &size); }
CTopLevelWindow_UpdatePinnedParts_Original(pThis);
return 0; }
BOOL Wh_ModInit(void) { Wh_Log(L"We're back");
bool already_running = !(*(USHORT*)((long long)NtCurrentTeb() + 0x17EE) & 0x0400);
if (!already_running) { return FALSE; }
HMODULE hUser32 = GetModuleHandle(L"user32.dll");
void* GetSystemMetricsForDpiAddr = (void*)GetProcAddress(hUser32, "GetSystemMetricsForDpi"); Wh_SetFunctionHook(GetSystemMetricsForDpiAddr, (void*)GetSystemMetricsForDpiHook, (void**)&GetSystemMetricsForDpiOrig);
/* --------------------------- */
HMODULE uDWM = GetModuleHandle(L"uDWM.dll"); if (!uDWM) return FALSE;
WH_FIND_SYMBOL findSymbol; HANDLE findSymbolHandle = Wh_FindFirstSymbol(uDWM, nullptr, &findSymbol); if (!findSymbolHandle) { Wh_Log(L"Wh_FindFirstSymbol failed"); return FALSE; } void* UpdateCurrentGlyphOpacityAddr = nullptr; void* CVisualSetSizeAddr = nullptr; void* PositionsAndSizesAddr = nullptr; void* UpdateNCAreaButtonAddr = nullptr; void* UpdateColorizationColorAddr = nullptr; void* UpdateNCAreaBackgroundAddr = nullptr; void* CTextSetBackgroundColorAddr = nullptr; void* ValidateResourcesAddr = nullptr; void* UpdateMarginsDependentOnStyleAddr = nullptr; void* SetColorAddr = nullptr; void* DrawStateAddr = nullptr;
do { if (_wcsicmp(findSymbol.symbol, L"private: void __cdecl CButton::UpdateCurrentGlyphOpacity(bool)") == 0) { UpdateCurrentGlyphOpacityAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: virtual long __cdecl CVisual::SetSize(struct tagSIZE const *)") == 0) { CVisualSetSizeAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CTopLevelWindow::UpdateNCAreaPositionsAndSizes(void)") == 0) { PositionsAndSizesAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CTopLevelWindow::UpdateNCAreaButton(enum CTopLevelWindow::ButtonType,int,int,int *)") == 0) { UpdateNCAreaButtonAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CTopLevelWindow::UpdateColorizationColor(void)") == 0) { UpdateColorizationColorAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CTopLevelWindow::UpdateNCAreaBackground(void)") == 0) { UpdateNCAreaBackgroundAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CText::SetBackgroundColor(unsigned long)") == 0) { CTextSetBackgroundColorAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CText::ValidateResources(void)") == 0) { ValidateResourcesAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: bool __cdecl CTopLevelWindow::UpdateMarginsDependentOnStyle(void)") == 0) { UpdateMarginsDependentOnStyleAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CText::SetColor(unsigned long)") == 0) { SetColorAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CButton::DrawStateW(class CAtlasButton *,enum CButton::ButtonStates)") == 0) { DrawStateAddr = findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CTopLevelWindow::OnAccentPolicyUpdated(void)") == 0) { CTopLevelWindow_OnAccentPolicyUpdated_Original = (CTopLevelWindow_OnAccentPolicyUpdated_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"void __cdecl MilInstrumentationCheckHR_MaybeFailFast(unsigned long,long const * const,unsigned int,long,unsigned int,void *)") == 0) { MilInstrumentationCheckHR_MaybeFailFast_Original = (MilInstrumentationCheckHR_MaybeFailFast_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CVisual::SetInsetFromParentTop(int)") == 0) { CVisual_SetInsetFromParentTop_Original = (CVisual_SetInsetFromParentTop_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CVisual::SetInsetFromParentLeft(int)") == 0) { CVisual_SetInsetFromParentLeft_Original = (CVisual_SetInsetFromParentLeft_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: virtual void __cdecl CVisual::SetDirtyFlags(unsigned long)") == 0) { CVisual_SetDirtyFlags_Original = (CVisual_SetDirtyFlags_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: long __cdecl CTopLevelWindow::UpdatePinnedParts(void)") == 0) { CTopLevelWindow_UpdatePinnedParts_Original = (CTopLevelWindow_UpdatePinnedParts_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: void __cdecl CVisual::SetInsetFromParent(struct _MARGINS const &)") == 0) { CVisual_SetInsetFromParent_Original = (CVisual_SetInsetFromParent_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: virtual long __cdecl CText::SetSize(struct tagSIZE const *)") == 0) { CText_SetSize_Original = (CText_SetSize_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: long __cdecl CSolidColorLegacyMilBrushProxy::Update(double,struct _D3DCOLORVALUE const &)") == 0) { CSolidColorLegacyMilBrushProxy_Update_Original = (CSolidColorLegacyMilBrushProxy_Update_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"protected: long __cdecl CCompositor::CreateProxy(class CSolidColorLegacyMilBrushProxy * *)") == 0) { CCompositor_CreateMilBrushProxy_Original = (CCompositor_CreateMilBrushProxy_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"protected: long __cdecl CCompositor::CreateProxy(class CMatrixTransformProxy * *)") == 0) { CCompositor_CreateMatrixTransformProxy_Original = (CCompositor_CreateMatrixTransformProxy_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: static long __cdecl CPushTransformInstruction::Create(class CBaseTransformProxy *,class CPushTransformInstruction * *)") == 0) { CPushTransformInstruction_Create_Original = (CPushTransformInstruction_Create_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: long __cdecl CRenderDataVisual::AddInstruction(class CRenderDataInstruction *)") == 0) { CRenderDataVisual_AddInstruction_Original = (CRenderDataVisual_AddInstruction_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: static long __cdecl CBitmapSource::Create(struct IWICBitmap *,struct _MARGINS const *,class CBitmapSource * *)") == 0) { CBitmapSource_Create_Original = (CBitmapSource_Create_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: static long __cdecl CDrawImageInstruction::Create(class CBitmapSource *,struct tagRECT const *,class CDrawImageInstruction * *)") == 0) { CDrawImageInstruction_Create_Original = (CDrawImageInstruction_Create_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: static long __cdecl CPopInstruction::Create(class CPopInstruction * *)") == 0) { CPopInstruction_Create_Original = (CPopInstruction_Create_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"public: long __cdecl CTopLevelWindow::GetAccentBlurBehindBrush(class CImageLegacyMilBrushProxy * *,class CCachedVisualImageProxy * *,struct MilPoint3F *)") == 0) { CTopLevelWindow_GetAccentBlurBehindBrush_Original = (CTopLevelWindow_GetAccentBlurBehindBrush_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: void __cdecl CText::ReleaseResources(void)") == 0) { CText_ReleaseResources_Original = (CText_ReleaseResources_t)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } else if (_wcsicmp(findSymbol.symbol, L"private: static class CDesktopManager * CDesktopManager::s_pDesktopManagerInstance") == 0) { DesktopManagerInstance = (long long*)findSymbol.address; Wh_Log(L"symbol: %s, Addr: %i", findSymbol.symbol, findSymbol.address); } /*else { Wh_Log(L"symbol: %s", findSymbol.symbol); }*/ } while (Wh_FindNextSymbol(findSymbolHandle, &findSymbol));
Wh_SetFunctionHook(UpdateCurrentGlyphOpacityAddr, (void*)CButton__UpdateCurrentGlyphOpacity_Hook, (void**)&CButton__UpdateCurrentGlyphOpacity_Original); Wh_SetFunctionHook(CVisualSetSizeAddr, (void*)CVisual_SetSize_Hook, (void**)&CVisual_SetSize_Original); Wh_SetFunctionHook(PositionsAndSizesAddr, (void*)CTopLevelWindow_UpdateNCAreaPositionsAndSizes_Hook, (void**)&CTopLevelWindow_UpdateNCAreaPositionsAndSizes_Original); Wh_SetFunctionHook(UpdateNCAreaButtonAddr, (void*)CTopLevelWindow_UpdateNCAreaButton_Hook, (void**)&CTopLevelWindow_UpdateNCAreaButton_Original); Wh_SetFunctionHook(UpdateColorizationColorAddr, (void*)CTopLevelWindow_UpdateColorizationColor_Hook, (void**)&CTopLevelWindow_UpdateColorizationColor_Original); Wh_SetFunctionHook(UpdateNCAreaBackgroundAddr, (void*)CTopLevelWindow_UpdateNCAreaBackground_Hook, (void**)&CTopLevelWindow_UpdateNCAreaBackground_Original); Wh_SetFunctionHook(CTextSetBackgroundColorAddr, (void*)CText_SetBackgroundColor_Hook, (void**)&CText_SetBackgroundColor_Original); Wh_SetFunctionHook(ValidateResourcesAddr, (void*)CText_ValidateResources_Hook, (void**)&CText_ValidateResources_Original); Wh_SetFunctionHook(UpdateMarginsDependentOnStyleAddr, (void*)CTopLevelWindow_UpdateMarginsDependentOnStyle_Hook, (void**)&CTopLevelWindow_UpdateMarginsDependentOnStyle_Original); Wh_SetFunctionHook(DrawStateAddr, (void*)CButton_DrawStateW_Hook, (void**)&CButton_DrawStateW_Original); Wh_Log(L"It's over"); return TRUE; }
To change the colors and the classic metric, you can use this tool: gitlab.com/ftortoriello/WinClassicThemeConfigBe careful, this does not enter the parameters in the visual style (you have to enter them manually in Mssstyleeditor) but gives a preview without having to restart the session.
|
|
|
Post by sevenclassic on Aug 12, 2024 14:11:32 GMT -8
I've been looking where network and volume icons are located, as they are white, which doesn't suit too well, when taskbar color is rgb (212,208,200). Network icon(s) appear to be in pnidui.dll, and volume ones in SndVolSSO.dll.mun. Some testing:
So far, the theme I'm working on, has yet another oddity. Title text is missing on the 'properties' windows and some other 'sub windows' too (not sure what they are called), or have, for some reason, the same color as title bar:
I have a 'messed up' instance of W10 on vm, which doesn't have that problem, though. There is still a problem: I didn't write notes of what I did. One thing I can remember, is that I just deleted aero.msstyle- and related mui file.
So, all kinds of (ab)use of W10 can be done safely in vm. Sky is the only limit.
The thing, that puzzled me was, why the changes/results don't show like in msstyle editor's test mode, when using resource hacker. Solution, that I read about in this forum (kudos to its writer) to that is to delete contents of VSCache folder.
But generally, at least for me, it's pain in the butt to have to mess with W10's file/folder protection stuff. One possible shortcut could be to use some lightweight, live linux distro to replace/rename/delete windows files or whatever, as it doesn't care about window's policies. I've tested live puppy linux for that in W10 vm (no other reason, but it has hd's partitions nicely listed on its screen).
Plenty of testing ahead, and one thing I probably re-visit just for fun, is the window caption buttons, as they have several states that are connected to certain bitmaps. How about having a cheapo version of W7's classic ones in W10?
|
|