diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /tier2/vconfig.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'tier2/vconfig.cpp')
| -rw-r--r-- | tier2/vconfig.cpp | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/tier2/vconfig.cpp b/tier2/vconfig.cpp new file mode 100644 index 0000000..ff90afc --- /dev/null +++ b/tier2/vconfig.cpp @@ -0,0 +1,149 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Utilities for setting vproject settings +// +//===========================================================================// + +#ifdef _WIN32 +#if !defined( _X360 ) +#include <windows.h> +#endif +#include <direct.h> +#include <io.h> // _chmod +#include <process.h> +#endif +#if defined( _X360 ) +#include "xbox/xbox_win32stubs.h" +#endif +#include "vconfig.h" + + +#ifdef _WIN32 +//----------------------------------------------------------------------------- +// Purpose: Returns the string value of a registry key +// Input : *pName - name of the subKey to read +// *pReturn - string buffer to receive read string +// size - size of specified buffer +//----------------------------------------------------------------------------- +bool GetVConfigRegistrySetting( const char *pName, char *pReturn, int size ) +{ + // Open the key + HKEY hregkey; + // Changed to HKEY_CURRENT_USER from HKEY_LOCAL_MACHINE + if ( RegOpenKeyEx( HKEY_CURRENT_USER, VPROJECT_REG_KEY, 0, KEY_QUERY_VALUE, &hregkey ) != ERROR_SUCCESS ) + return false; + + // Get the value + DWORD dwSize = size; + if ( RegQueryValueEx( hregkey, pName, NULL, NULL,(LPBYTE) pReturn, &dwSize ) != ERROR_SUCCESS ) + return false; + + // Close the key + RegCloseKey( hregkey ); + + return true; +} + +//----------------------------------------------------------------------------- +// Purpose: Sends a global system message to alert programs to a changed environment variable +//----------------------------------------------------------------------------- +void NotifyVConfigRegistrySettingChanged( void ) +{ + DWORD_PTR dwReturnValue = 0; + + // Propagate changes so that environment variables takes immediate effect! + SendMessageTimeout( HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue ); +} + +//----------------------------------------------------------------------------- +// Purpose: Set the registry entry to a string value, under the given subKey +// Input : *pName - name of the subKey to set +// *pValue - string value +//----------------------------------------------------------------------------- +void SetVConfigRegistrySetting( const char *pName, const char *pValue, bool bNotify ) +{ + HKEY hregkey; + + // Changed to HKEY_CURRENT_USER from HKEY_LOCAL_MACHINE + // Open the key + if ( RegCreateKeyEx( + HKEY_CURRENT_USER, // base key + VPROJECT_REG_KEY, // subkey + 0, // reserved + 0, // lpClass + 0, // options + (REGSAM)KEY_ALL_ACCESS, // access desired + NULL, // security attributes + &hregkey, // result + NULL // tells if it created the key or not (which we don't care) + ) != ERROR_SUCCESS ) + { + return; + } + + // Set the value to the string passed in + int nType = strchr( pValue, '%' ) ? REG_EXPAND_SZ : REG_SZ; + RegSetValueEx( hregkey, pName, 0, nType, (const unsigned char *)pValue, (int) strlen(pValue) ); + + // Notify other programs + if ( bNotify ) + { + NotifyVConfigRegistrySettingChanged(); + } + + // Close the key + RegCloseKey( hregkey ); +} + +//----------------------------------------------------------------------------- +// Purpose: Removes the obsolete user keyvalue +// Input : *pName - name of the subKey to set +// *pValue - string value +//----------------------------------------------------------------------------- +bool RemoveObsoleteVConfigRegistrySetting( const char *pValueName, char *pOldValue, int size ) +{ + // Open the key + HKEY hregkey; + if ( RegOpenKeyEx( HKEY_CURRENT_USER, "Environment", 0, (REGSAM)KEY_ALL_ACCESS, &hregkey ) != ERROR_SUCCESS ) + return false; + + // Return the old state if they've requested it + if ( pOldValue != NULL ) + { + DWORD dwSize = size; + + // Get the value + if ( RegQueryValueEx( hregkey, pValueName, NULL, NULL,(LPBYTE) pOldValue, &dwSize ) != ERROR_SUCCESS ) + return false; + } + + // Remove the value + if ( RegDeleteValue( hregkey, pValueName ) != ERROR_SUCCESS ) + return false; + + // Close the key + RegCloseKey( hregkey ); + + // Notify other programs + NotifyVConfigRegistrySettingChanged(); + + return true; +} + +//----------------------------------------------------------------------------- +// Purpose: Take a user-defined environment variable and swap it out for the internally used one +//----------------------------------------------------------------------------- + +bool ConvertObsoleteVConfigRegistrySetting( const char *pValueName ) +{ + char szValue[MAX_PATH]; + if ( RemoveObsoleteVConfigRegistrySetting( pValueName, szValue, sizeof( szValue ) ) ) + { + // Set it up the correct way + SetVConfigRegistrySetting( pValueName, szValue ); + return true; + } + + return false; +} +#endif |