187 lines
4.9 KiB
C++
187 lines
4.9 KiB
C++
|
//
|
|||
|
// <20><><EFBFBD>W<EFBFBD>X<EFBFBD>g<EFBFBD><67><EFBFBD>T<EFBFBD>|<7C>[<5B>g<EFBFBD>N<EFBFBD><4E><EFBFBD>X
|
|||
|
//
|
|||
|
|
|||
|
#include "DebugOut.h"
|
|||
|
#include "Registry.h"
|
|||
|
|
|||
|
#include "App.h"
|
|||
|
#include "Pathlib.h"
|
|||
|
|
|||
|
#define INI_USE
|
|||
|
|
|||
|
CHAR CRegistry::m_szRegistryKey[MAX_PATH] = { "App" };
|
|||
|
|
|||
|
void CRegistry::SetRegistryKey( LPCTSTR lpszKey )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
if( lpszKey ) {
|
|||
|
::_tcscpy( m_szRegistryKey, lpszKey );
|
|||
|
}
|
|||
|
#else
|
|||
|
string str;
|
|||
|
str = CApp::GetModulePath();
|
|||
|
str += lpszKey;
|
|||
|
|
|||
|
::_tcscpy( m_szRegistryKey, str.c_str() );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
HKEY CRegistry::GetRegistryKey()
|
|||
|
{
|
|||
|
HKEY hAppKey = NULL;
|
|||
|
HKEY hSoftKey = NULL;
|
|||
|
if( ::RegOpenKeyEx(HKEY_CURRENT_USER, _T("software"), 0, KEY_WRITE|KEY_READ, &hSoftKey) == ERROR_SUCCESS ) {
|
|||
|
DWORD dw;
|
|||
|
::RegCreateKeyEx( hSoftKey, m_szRegistryKey, 0, REG_NONE,
|
|||
|
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &hAppKey, &dw);
|
|||
|
}
|
|||
|
if( hSoftKey )
|
|||
|
::RegCloseKey( hSoftKey );
|
|||
|
return hAppKey;
|
|||
|
}
|
|||
|
|
|||
|
HKEY CRegistry::GetSectionKey( LPCTSTR lpszSection )
|
|||
|
{
|
|||
|
HKEY hAppKey = GetRegistryKey();
|
|||
|
if( !hAppKey )
|
|||
|
return NULL;
|
|||
|
HKEY hSectionKey = NULL;
|
|||
|
DWORD dw;
|
|||
|
::RegCreateKeyEx( hAppKey, lpszSection, 0, REG_NONE,
|
|||
|
REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL, &hSectionKey, &dw );
|
|||
|
::RegCloseKey( hAppKey );
|
|||
|
|
|||
|
return hSectionKey;
|
|||
|
}
|
|||
|
|
|||
|
UINT CRegistry::GetProfileInt( LPCTSTR lpszSection, LPCTSTR lpszEntry, INT nDefault )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return nDefault;
|
|||
|
DWORD dwValue;
|
|||
|
DWORD dwType;
|
|||
|
DWORD dwCount = sizeof(DWORD);
|
|||
|
LONG lResult = ::RegQueryValueEx( hSecKey, (LPTSTR)lpszEntry, NULL, &dwType, (LPBYTE)&dwValue, &dwCount );
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
|
|||
|
return (lResult==ERROR_SUCCESS)?(UINT)dwValue:nDefault;
|
|||
|
#else
|
|||
|
return ::GetPrivateProfileInt( lpszSection, lpszEntry, nDefault, m_szRegistryKey );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
BOOL CRegistry::GetProfileString( LPCSTR lpszSection, LPCSTR lpszEntry, LPVOID lpData, UINT nBytes )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return lpszDefault;
|
|||
|
|
|||
|
DWORD dwType, dwCount;
|
|||
|
LONG lResult = ::RegQueryValueEx( hSecKey, (LPTSTR)lpszEntry, NULL, &dwType, NULL, &dwCount );
|
|||
|
if( dwCount > nBytes ) {
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
if( lResult == ERROR_SUCCESS ) {
|
|||
|
lResult = ::RegQueryValueEx( hSecKey, (LPTSTR)lpszEntry, NULL, &dwType, lpData, &dwCount );
|
|||
|
}
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
|
|||
|
return (lResult==ERROR_SUCCESS)?TRUE:FALSE;
|
|||
|
#else
|
|||
|
DWORD dw = ::GetPrivateProfileString( lpszSection, lpszEntry, "", (CHAR*)lpData, nBytes, m_szRegistryKey );
|
|||
|
return (dw&&(dw<nBytes))?TRUE:FALSE;
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
BOOL CRegistry::GetProfileBinary( LPCSTR lpszSection, LPCSTR lpszEntry, LPVOID lpData, UINT nBytes )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
HKEY hSecKey = GetSectionKey(lpszSection);
|
|||
|
if( !hSecKey )
|
|||
|
return FALSE;
|
|||
|
|
|||
|
DWORD dwType, dwCount;
|
|||
|
LONG lResult = ::RegQueryValueEx( hSecKey, (LPTSTR)lpszEntry, NULL, &dwType, NULL, &dwCount );
|
|||
|
if( dwCount > nBytes ) {
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
if( lResult == ERROR_SUCCESS ) {
|
|||
|
lResult = ::RegQueryValueEx( hSecKey, (LPTSTR)lpszEntry, NULL, &dwType, lpData, &dwCount );
|
|||
|
}
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
|
|||
|
return (lResult==ERROR_SUCCESS)?TRUE:FALSE;
|
|||
|
#else
|
|||
|
return ::GetPrivateProfileStruct( lpszSection, lpszEntry, lpData, nBytes, m_szRegistryKey );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
BOOL CRegistry::WriteProfileInt( LPCSTR lpszSection, LPCSTR lpszEntry, INT nValue )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return FALSE;
|
|||
|
LONG lResult = ::RegSetValueEx(hSecKey, lpszEntry, NULL, REG_DWORD,
|
|||
|
(LPBYTE)&nValue, sizeof(nValue));
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
return (lResult == ERROR_SUCCESS);
|
|||
|
#else
|
|||
|
CHAR szTemp[16];
|
|||
|
wsprintf( szTemp, "%d", nValue );
|
|||
|
return ::WritePrivateProfileString( lpszSection, lpszEntry, szTemp, m_szRegistryKey );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
BOOL CRegistry::WriteProfileString( LPCSTR lpszSection, LPCSTR lpszEntry, LPCSTR lpszValue )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
LONG lResult;
|
|||
|
if( !lpszEntry ) {
|
|||
|
HKEY hAppKey = GetRegistryKey();
|
|||
|
if( !hAppKey )
|
|||
|
return FALSE;
|
|||
|
lResult = ::RegDeleteKey( hAppKey, lpszSection );
|
|||
|
::RegCloseKey( hAppKey );
|
|||
|
} else if( !lpszValue ) {
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return FALSE;
|
|||
|
lResult = ::RegDeleteValue( hSecKey, (LPTSTR)lpszEntry );
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
} else {
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return FALSE;
|
|||
|
lResult = ::RegSetValueEx(hSecKey, lpszEntry, NULL, REG_SZ,
|
|||
|
(LPBYTE)lpszValue, (lstrlen(lpszValue)+1)*sizeof(TCHAR));
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
}
|
|||
|
return (lResult == ERROR_SUCCESS);
|
|||
|
#else
|
|||
|
return ::WritePrivateProfileString( lpszSection, lpszEntry, lpszValue, m_szRegistryKey );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|
|||
|
BOOL CRegistry::WriteProfileBinary( LPCSTR lpszSection, LPCSTR lpszEntry, LPVOID lpData, UINT nBytes )
|
|||
|
{
|
|||
|
#ifndef INI_USE
|
|||
|
HKEY hSecKey = GetSectionKey( lpszSection );
|
|||
|
if( !hSecKey )
|
|||
|
return FALSE;
|
|||
|
LONG lResult = ::RegSetValueEx(hSecKey, lpszEntry, NULL, REG_BINARY, lpData, nBytes );
|
|||
|
::RegCloseKey( hSecKey );
|
|||
|
return (lResult == ERROR_SUCCESS);
|
|||
|
#else
|
|||
|
return ::WritePrivateProfileStruct( lpszSection, lpszEntry, lpData, nBytes, m_szRegistryKey );
|
|||
|
#endif
|
|||
|
}
|
|||
|
|