@ -54,6 +54,7 @@ There are two (known to me, at time of writing) ways to get a working overlay fo
# include <spdlog/sinks/stdout_color_sinks.h>
# include <spdlog/spdlog.h>
# include <fstream>
enum ZBID
{
@ -77,6 +78,7 @@ enum ZBID
ZBID_LOCK = 17 ,
ZBID_ABOVELOCK_UX = 18 ,
} ;
typedef BOOL ( WINAPI * fSetWindowBand ) ( HWND hWnd , HWND hwndInsertAfter , DWORD dwBand ) ;
@ -85,6 +87,8 @@ fSetWindowBand SetWindowBand;
std : : atomic < bool > allow_exit = false ;
std : : atomic < ZBID > to_set_window_band = ZBID_SYSTEM_TOOLS ;
BOOL WINAPI SetGlosSIWindowBand ( HWND hWnd , HWND hwndInsertAfter , DWORD dwBand )
{
subhook : : ScopedHookRemove remove ( & SetWindowBandHook ) ;
@ -96,11 +100,10 @@ BOOL WINAPI SetGlosSIWindowBand(HWND hWnd, HWND hwndInsertAfter, DWORD dwBand)
// However, notification and system_tools does!
// use system tools, as that allows the steam overlay to be interacted with
// without UWP apps minimizing
SetWindowBand ( glossi_hwnd , nullptr , ZBID_SYSTEM_TOOLS ) ;
auto success = SetWindowBand ( glossi_hwnd , nullptr , to_set_window_band ) ;
allow_exit = true ;
spdlog : : info ( " Set GlosSI Window Band to ZBID_SYSTEM_TOOLS" ) ;
spdlog : : info ( " Set GlosSI Window Band to {}; success: {}" , static_cast < int > ( to_set_window_band ) , success ) ;
}
spdlog : : info ( " Calling original " ) ;
return SetWindowBand ( hWnd , hwndInsertAfter , dwBand ) ;
}
@ -126,17 +129,21 @@ BOOL APIENTRY DllMain( HMODULE hModule,
if ( ul_reason_for_call = = DLL_PROCESS_ATTACH )
{
auto p ath = std : : filesystem : : temp_directory_path ( )
auto configDirP ath = std : : filesystem : : temp_directory_path ( )
. parent_path ( )
. parent_path ( )
. parent_path ( ) ;
path / = " Roaming " ;
path / = " GlosSI " ;
if ( ! std : : filesystem : : exists ( path ) )
std : : filesystem : : create_directories ( path ) ;
path / = " UWPOverlayEnabler.log " ;
const auto file_sink = std : : make_shared < spdlog : : sinks : : basic_file_sink_mt > ( path . string ( ) , true ) ;
configDirPath / = " Roaming " ;
configDirPath / = " GlosSI " ;
if ( ! std : : filesystem : : exists ( configDirPath ) )
std : : filesystem : : create_directories ( configDirPath ) ;
auto logPath = configDirPath ;
logPath / = " UWPOverlayEnabler.log " ;
const auto file_sink = std : : make_shared < spdlog : : sinks : : basic_file_sink_mt > ( logPath . string ( ) , true ) ;
std : : vector < spdlog : : sink_ptr > sinks { file_sink } ;
auto logger = std : : make_shared < spdlog : : logger > ( " log " , sinks . begin ( ) , sinks . end ( ) ) ;
logger - > set_level ( spdlog : : level : : trace ) ;
@ -145,6 +152,59 @@ BOOL APIENTRY DllMain( HMODULE hModule,
spdlog : : info ( " UWPOverlayEnabler loaded " ) ;
auto configPath = configDirPath ;
configPath / = " UWPOverlayEnabler.cfg " ;
if ( std : : filesystem : : exists ( configPath ) )
{
std : : ifstream config ( configPath ) ;
std : : string line ;
while ( std : : getline ( config , line ) )
{
// github copilot, lol
// i take it!
if ( line = = " ZBID_DEFAULT " )
to_set_window_band = ZBID_DEFAULT ;
else if ( line = = " ZBID_DESKTOP " )
to_set_window_band = ZBID_DESKTOP ;
else if ( line = = " ZBID_UIACCESS " )
to_set_window_band = ZBID_UIACCESS ;
else if ( line = = " ZBID_IMMERSIVE_IHM " )
to_set_window_band = ZBID_IMMERSIVE_IHM ;
else if ( line = = " ZBID_IMMERSIVE_NOTIFICATION " )
to_set_window_band = ZBID_IMMERSIVE_NOTIFICATION ;
else if ( line = = " ZBID_IMMERSIVE_APPCHROME " )
to_set_window_band = ZBID_IMMERSIVE_APPCHROME ;
else if ( line = = " ZBID_IMMERSIVE_MOGO " )
to_set_window_band = ZBID_IMMERSIVE_MOGO ;
else if ( line = = " ZBID_IMMERSIVE_EDGY " )
to_set_window_band = ZBID_IMMERSIVE_EDGY ;
else if ( line = = " ZBID_IMMERSIVE_INACTIVEMOBODY " )
to_set_window_band = ZBID_IMMERSIVE_INACTIVEMOBODY ;
else if ( line = = " ZBID_IMMERSIVE_INACTIVEDOCK " )
to_set_window_band = ZBID_IMMERSIVE_INACTIVEDOCK ;
else if ( line = = " ZBID_IMMERSIVE_ACTIVEMOBODY " )
to_set_window_band = ZBID_IMMERSIVE_ACTIVEMOBODY ;
else if ( line = = " ZBID_IMMERSIVE_ACTIVEDOCK " )
to_set_window_band = ZBID_IMMERSIVE_ACTIVEDOCK ;
else if ( line = = " ZBID_IMMERSIVE_BACKGROUND " )
to_set_window_band = ZBID_IMMERSIVE_BACKGROUND ;
else if ( line = = " ZBID_IMMERSIVE_SEARCH " )
to_set_window_band = ZBID_IMMERSIVE_SEARCH ;
else if ( line = = " ZBID_GENUINE_WINDOWS " )
to_set_window_band = ZBID_GENUINE_WINDOWS ;
else if ( line = = " ZBID_IMMERSIVE_RESTRICTED " )
to_set_window_band = ZBID_IMMERSIVE_RESTRICTED ;
else if ( line = = " ZBID_SYSTEM_TOOLS " )
to_set_window_band = ZBID_SYSTEM_TOOLS ;
else if ( line = = " ZBID_LOCK " )
to_set_window_band = ZBID_LOCK ;
else if ( line = = " ZBID_ABOVELOCK_UX " )
to_set_window_band = ZBID_ABOVELOCK_UX ;
}
spdlog : : info ( " Read window band from config: {} " , static_cast < int > ( to_set_window_band ) ) ;
}
const auto hpath = LoadLibrary ( L " user32.dll " ) ;
if ( hpath )
{