mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-08 01:39:36 +00:00
1
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user