diff --git a/README.md b/README.md index 564af60..d57e4ac 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,9 @@ Based on [SimpleClassicTheme.FileExplorerHook](https://github.com/AEAEAEAE4343/S ## Classic Theme Windows Forces Classic Theme on all Windows -Originally written by WinClassic user Travis. ~~Added DWM disabler from BasicThemer2 for classic titlebars.~~ Built-in BasicThemer2 support needs to be reworked. +Originally written by WinClassic user Travis. Added DWM disabler from BasicThemer2 for classic titlebars and Classic File Picker. -## Classic File Picker -Restores pre-Vista file picker. Requires Classic Theme Windows mod or else Windows just upgrades the dialog. \ No newline at end of file +## ~~Classic File Picker~~ +~~Restores pre-Vista file picker. Requires Classic Theme Windows mod or else Windows just upgrades the dialog.~~ + +Merged into Classic Theme Windows since its required to work anyways. \ No newline at end of file diff --git a/classic-theme-windows.wh.cpp b/classic-theme-windows.wh.cpp index 04a1b3c..1013a38 100644 --- a/classic-theme-windows.wh.cpp +++ b/classic-theme-windows.wh.cpp @@ -2,7 +2,7 @@ // @id classic-theme-windows // @name Classic Theme Windows // @description Forces Classic Theme on all Windows -// @version 0.2 +// @version 0.3 // @author Travis, Cynosphere // @include * // @exclude wininit.exe @@ -30,7 +30,7 @@ // @exclude PhoneExperienceHost.exe // @exclude SecurityHealthTray.exe // @exclude Window Detective.exe -// @compilerOptions -luxtheme -ldwmapi +// @compilerOptions -luxtheme -ldwmapi -lole32 -lcomdlg32 // ==/WindhawkMod== // ==WindhawkModReadme== @@ -44,8 +44,10 @@ Forces Classic Theme on all Windows #include #include +DWORD thisPid = -1; + // BasicThemer2 reimplementation to render classic titlebars -/*static const int DisableDWM = DWMNCRP_DISABLED; +static const int DisableDWM = DWMNCRP_DISABLED; static const int EnableDWM = DWMNCRP_ENABLED; void BasicThemerEnable(HWND hwnd) { @@ -60,7 +62,13 @@ CreateWindowExW_t CreateWindowExW_Orig; HWND WINAPI CreateWindowExW_Hook(DWORD dwExStyle,LPCWSTR lpClassName,LPCWSTR lpWindowName,DWORD dwStyle,int X,int Y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam) { HWND res = CreateWindowExW_Orig(dwExStyle,lpClassName,lpWindowName,dwStyle,X,Y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam); - BasicThemerEnable(res); + if (thisPid != -1) { + DWORD targetPid; + GetWindowThreadProcessId(res, &targetPid); + if (targetPid == thisPid) { + BasicThemerEnable(res); + } + } return res; } @@ -69,7 +77,13 @@ CreateWindowExA_t CreateWindowExA_Orig; HWND WINAPI CreateWindowExA_Hook(DWORD dwExStyle,LPCSTR lpClassName,LPCSTR lpWindowName,DWORD dwStyle,int X,int Y,int nWidth,int nHeight,HWND hWndParent,HMENU hMenu,HINSTANCE hInstance,LPVOID lpParam) { HWND res = CreateWindowExA_Orig(dwExStyle,lpClassName,lpWindowName,dwStyle,X,Y,nWidth,nHeight,hWndParent,hMenu,hInstance,lpParam); - BasicThemerEnable(res); + if (thisPid != -1) { + DWORD targetPid; + GetWindowThreadProcessId(res, &targetPid); + if (targetPid == thisPid) { + BasicThemerEnable(res); + } + } return res; } @@ -85,15 +99,42 @@ BOOL CALLBACK DisableBasicThemerForAll(HWND hWnd, LPARAM lParam) { BasicThemerDisable(hWnd); return TRUE; -}*/ +} -// Windhawk function +// File picker +template +CLSID CreateGUID(const S& hexString) +{ + CLSID clsid; + CLSIDFromString(hexString, &clsid); + + return clsid; +} + +const CLSID CLSID_FileOpenDialog = CreateGUID(L"{DC1C5A9C-E88A-4dde-A5A1-60F82A20AEF7}"); +const CLSID CLSID_FileOpenDialogLegacy = CreateGUID(L"{725F645B-EAED-4fc5-B1C5-D9AD0ACCBA5E}"); +const CLSID CLSID_FileSaveDialog = CreateGUID(L"{c0b4e2f3-ba21-4773-8dba-335ec946eb8b}"); +const CLSID CLSID_FileSaveDialogLegacy = CreateGUID(L"{AF02484C-A0A9-4669-9051-058AB12B9195}"); + +using CoCreateInstance_t = decltype(&CoCreateInstance); +CoCreateInstance_t CoCreateInstance_Original; +HRESULT WINAPI CoCreateInstance_Hook(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv) { + if (rclsid == CLSID_FileOpenDialog) { + return CoCreateInstance_Original(CLSID_FileOpenDialogLegacy, pUnkOuter, dwClsContext, riid, ppv); + } else if (rclsid == CLSID_FileSaveDialog) { + return CoCreateInstance_Original(CLSID_FileSaveDialogLegacy, pUnkOuter, dwClsContext, riid, ppv); + } + + return CoCreateInstance_Original(rclsid, pUnkOuter, dwClsContext, riid, ppv); +} + +// Windhawk functions BOOL Wh_ModInit() { // Enable classic theme SetThemeAppProperties(0); // BasicThemer hooks - /*Wh_SetFunctionHook((void*)CreateWindowExW, + Wh_SetFunctionHook((void*)CreateWindowExW, (void*)CreateWindowExW_Hook, (void**)&CreateWindowExW_Orig); Wh_SetFunctionHook((void*)CreateWindowExA, @@ -101,8 +142,12 @@ BOOL Wh_ModInit() { (void**)&CreateWindowExA_Orig); // Iterate every window to enable BasicThemer - DWORD thisPid = GetProcessIdOfThread(GetCurrentThread()); - EnumWindows(EnableBasicThemerForAll, thisPid);*/ + thisPid = GetProcessIdOfThread(GetCurrentThread()); + EnumWindows(EnableBasicThemerForAll, thisPid); + + // File picker + Wh_SetFunctionHook((void*)CoCreateInstance, (void*)CoCreateInstance_Hook, + (void**)&CoCreateInstance_Original); return TRUE; } @@ -114,6 +159,6 @@ void Wh_ModUninit() { } // Iterate every window to disable BasicThemer - /*DWORD thisPid = GetProcessIdOfThread(GetCurrentThread()); - EnumWindows(DisableBasicThemerForAll, thisPid);*/ + thisPid = GetProcessIdOfThread(GetCurrentThread()); + EnumWindows(DisableBasicThemerForAll, thisPid); } \ No newline at end of file