Classic Theme Windows: merge classic file picker, fixup dwm disabler
This commit is contained in:
		
							parent
							
								
									3969dbbb43
								
							
						
					
					
						commit
						81b37cd193
					
				
					 2 changed files with 62 additions and 15 deletions
				
			
		| 
						 | 
					@ -9,7 +9,9 @@ Based on [SimpleClassicTheme.FileExplorerHook](https://github.com/AEAEAEAE4343/S
 | 
				
			||||||
## Classic Theme Windows
 | 
					## Classic Theme Windows
 | 
				
			||||||
Forces Classic Theme on all 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
 | 
					## ~~Classic File Picker~~
 | 
				
			||||||
Restores pre-Vista file picker. Requires Classic Theme Windows mod or else Windows just upgrades the dialog.
 | 
					~~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.
 | 
				
			||||||
| 
						 | 
					@ -2,7 +2,7 @@
 | 
				
			||||||
// @id              classic-theme-windows
 | 
					// @id              classic-theme-windows
 | 
				
			||||||
// @name            Classic Theme Windows
 | 
					// @name            Classic Theme Windows
 | 
				
			||||||
// @description     Forces Classic Theme on all Windows
 | 
					// @description     Forces Classic Theme on all Windows
 | 
				
			||||||
// @version         0.2
 | 
					// @version         0.3
 | 
				
			||||||
// @author          Travis, Cynosphere
 | 
					// @author          Travis, Cynosphere
 | 
				
			||||||
// @include         *
 | 
					// @include         *
 | 
				
			||||||
// @exclude         wininit.exe
 | 
					// @exclude         wininit.exe
 | 
				
			||||||
| 
						 | 
					@ -30,7 +30,7 @@
 | 
				
			||||||
// @exclude         PhoneExperienceHost.exe
 | 
					// @exclude         PhoneExperienceHost.exe
 | 
				
			||||||
// @exclude         SecurityHealthTray.exe
 | 
					// @exclude         SecurityHealthTray.exe
 | 
				
			||||||
// @exclude         Window Detective.exe
 | 
					// @exclude         Window Detective.exe
 | 
				
			||||||
// @compilerOptions -luxtheme -ldwmapi
 | 
					// @compilerOptions -luxtheme -ldwmapi -lole32 -lcomdlg32
 | 
				
			||||||
// ==/WindhawkMod==
 | 
					// ==/WindhawkMod==
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ==WindhawkModReadme==
 | 
					// ==WindhawkModReadme==
 | 
				
			||||||
| 
						 | 
					@ -44,8 +44,10 @@ Forces Classic Theme on all Windows
 | 
				
			||||||
#include <uxtheme.h>
 | 
					#include <uxtheme.h>
 | 
				
			||||||
#include <dwmapi.h>
 | 
					#include <dwmapi.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DWORD thisPid = -1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// BasicThemer2 reimplementation to render classic titlebars
 | 
					// BasicThemer2 reimplementation to render classic titlebars
 | 
				
			||||||
/*static const int DisableDWM = DWMNCRP_DISABLED;
 | 
					static const int DisableDWM = DWMNCRP_DISABLED;
 | 
				
			||||||
static const int EnableDWM = DWMNCRP_ENABLED;
 | 
					static const int EnableDWM = DWMNCRP_ENABLED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void BasicThemerEnable(HWND hwnd) {
 | 
					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 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);
 | 
					    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;
 | 
					    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 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);
 | 
					    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;
 | 
					    return res;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -85,15 +99,42 @@ BOOL CALLBACK DisableBasicThemerForAll(HWND hWnd, LPARAM lParam) {
 | 
				
			||||||
        BasicThemerDisable(hWnd);
 | 
					        BasicThemerDisable(hWnd);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}*/
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Windhawk function
 | 
					// File picker
 | 
				
			||||||
 | 
					template<class S>
 | 
				
			||||||
 | 
					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() {
 | 
					BOOL Wh_ModInit() {
 | 
				
			||||||
    // Enable classic theme
 | 
					    // Enable classic theme
 | 
				
			||||||
    SetThemeAppProperties(0);
 | 
					    SetThemeAppProperties(0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // BasicThemer hooks
 | 
					    // BasicThemer hooks
 | 
				
			||||||
    /*Wh_SetFunctionHook((void*)CreateWindowExW,
 | 
					    Wh_SetFunctionHook((void*)CreateWindowExW,
 | 
				
			||||||
                       (void*)CreateWindowExW_Hook,
 | 
					                       (void*)CreateWindowExW_Hook,
 | 
				
			||||||
                       (void**)&CreateWindowExW_Orig);
 | 
					                       (void**)&CreateWindowExW_Orig);
 | 
				
			||||||
    Wh_SetFunctionHook((void*)CreateWindowExA,
 | 
					    Wh_SetFunctionHook((void*)CreateWindowExA,
 | 
				
			||||||
| 
						 | 
					@ -101,8 +142,12 @@ BOOL Wh_ModInit() {
 | 
				
			||||||
                       (void**)&CreateWindowExA_Orig);
 | 
					                       (void**)&CreateWindowExA_Orig);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Iterate every window to enable BasicThemer
 | 
					    // Iterate every window to enable BasicThemer
 | 
				
			||||||
    DWORD thisPid = GetProcessIdOfThread(GetCurrentThread());
 | 
					    thisPid = GetProcessIdOfThread(GetCurrentThread());
 | 
				
			||||||
    EnumWindows(EnableBasicThemerForAll, thisPid);*/
 | 
					    EnumWindows(EnableBasicThemerForAll, thisPid);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // File picker
 | 
				
			||||||
 | 
					    Wh_SetFunctionHook((void*)CoCreateInstance, (void*)CoCreateInstance_Hook,
 | 
				
			||||||
 | 
					                       (void**)&CoCreateInstance_Original);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return TRUE;
 | 
					    return TRUE;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -114,6 +159,6 @@ void Wh_ModUninit() {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // Iterate every window to disable BasicThemer
 | 
					    // Iterate every window to disable BasicThemer
 | 
				
			||||||
    /*DWORD thisPid = GetProcessIdOfThread(GetCurrentThread());
 | 
					    thisPid = GetProcessIdOfThread(GetCurrentThread());
 | 
				
			||||||
    EnumWindows(DisableBasicThemerForAll, thisPid);*/
 | 
					    EnumWindows(DisableBasicThemerForAll, thisPid);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue