1 //--- K.I.LIB ---
2 // kl_reg.h : registry and ini-file operation
3
4 #include "stdafx.h"
5 #include "kilib.h"
6
7
8 //---------------------------- openŚn ----------------------------//
9
10
11 bool kiRegKey::open( HKEY parent, LPCTSTR keyname, REGSAM access )
12 {
13 return (ERROR_SUCCESS == RegOpenKeyEx( parent,
14 keyname, 0, access, &m_hKey ));
15 }
16
17 bool kiRegKey::create( HKEY parent, LPCTSTR keyname, REGSAM access )
18 {
19 DWORD x;
20 return (ERROR_SUCCESS == RegCreateKeyEx( parent,
21 keyname, 0, REG_NONE, REG_OPTION_NON_VOLATILE, access, NULL, &m_hKey, &x ));
22 }
23
24
25 //------------------------- query/setŚn ----------------------------//
26
27
28 bool kiRegKey::get( LPCTSTR valname, DWORD* val )
29 {
30 DWORD x=4;
31 return (ERROR_SUCCESS == RegQueryValueEx( m_hKey,
32 valname, NULL, NULL, (BYTE*)val, &x ));
33 }
34
35 bool kiRegKey::get( LPCTSTR valname, BYTE* val, DWORD siz )
36 {
37 return (ERROR_SUCCESS == RegQueryValueEx( m_hKey,
38 valname, NULL, NULL, val, &siz ));
39 }
40
41 bool kiRegKey::get( LPCTSTR valname, kiStr* val )
42 {
43 static char dat[2048];
44 DWORD x = 2048;
45 if( ERROR_SUCCESS == RegQueryValueEx( m_hKey,
46 valname, NULL, NULL, (BYTE*)dat, &x ))
47 {
48 *val = dat;
49 return true;
50 }
51 return false;
52 }
53
54 bool kiRegKey::set( LPCTSTR valname, DWORD val )
55 {
56 return (ERROR_SUCCESS == RegSetValueEx( m_hKey,
57 valname, 0, REG_DWORD, (BYTE*)&val, 4 ));
58 }
59
60 bool kiRegKey::set( LPCTSTR valname, BYTE* val, DWORD siz )
61 {
62 return (ERROR_SUCCESS == RegSetValueEx( m_hKey,
63 valname, 0, REG_BINARY, (BYTE*)val, siz ));
64 }
65
66 bool kiRegKey::set( LPCTSTR valname, LPCTSTR val )
67 {
68 return (ERROR_SUCCESS == RegSetValueEx( m_hKey,
69 valname, 0, REG_SZ, (BYTE*)val, ki_strlen(val)+1 ));
70 }
71
72
73 //--------------------------- deleteŚn ----------------------------//
74
75
76 bool kiRegKey::del( LPCTSTR valname )
77 {
78 return (ERROR_SUCCESS == RegDeleteValue( m_hKey, valname ));
79 }
80
81 bool kiRegKey::delSubKey( LPCTSTR keyname )
82 {
83 if( app()->osver().dwPlatformId == VER_PLATFORM_WIN32_NT )
84 return delSubKeyRecursive( m_hKey, keyname );
85 else
86 return (ERROR_SUCCESS == RegDeleteKey( m_hKey, keyname ));
87 }
88
89 bool kiRegKey::delSubKeyRecursive( HKEY k, LPCTSTR n )
90 {
91 HKEY k2;
92 if( ERROR_SUCCESS!=RegOpenKeyEx( k,n,0,KEY_READ,&k2 ) )
93 return false;
94
95 bool ans = true;
96 static char buf[2048];
97 DWORD bs = sizeof(buf);
98
99 for( int i=0;
100 ERROR_SUCCESS==RegEnumKeyEx( k2,i,buf,&bs,NULL,NULL,NULL,NULL );
101 i++ )
102 {
103 if( !delSubKeyRecursive( k2,buf ) )
104 ans = false;
105 bs = sizeof(buf);
106 }
107
108 RegCloseKey( k2 );
109 RegDeleteKey( k,n );
110 return ans;
111 }
112
113 //--------------------------- ini:Ź‰Šú‰» ----------------------------//
114
115
116 void kiIniFile::setFileName( const char* ini, bool exepath )
117 {
118 if( !exepath )
119 m_FileName = "";
120 else
121 {
122 m_FileName.beSpecialPath( kiPath::Exe );
123 m_FileName.beBackSlash( true );
124 }
125 m_FileName += ini;
126 }
127
128
129 //--------------------------- ini:readŚn ----------------------------//
130
131
132 int kiIniFile::getInt( const char* key, int defval )
133 {
134 return ::GetPrivateProfileInt( m_CurSec, key, defval, m_FileName );
135 }
136
137 bool kiIniFile::getBool( const char* key, bool defval )
138 {
139 return (0 != ::GetPrivateProfileInt( m_CurSec,
140 key, defval?1:0, m_FileName ) );
141 }
142
143 const char* kiIniFile::getStr( const char* key, const char* defval )
144 {
145 ::GetPrivateProfileString( m_CurSec, key, defval,
146 m_StrBuf, sizeof(m_StrBuf), m_FileName );
147 return m_StrBuf;
148 }
149
150
151 //--------------------------- ini:writeŚn ----------------------------//
152
153
154 bool kiIniFile::putStr( const char* key, const char* val )
155 {
156 return (FALSE != ::WritePrivateProfileString(
157 m_CurSec, key, val, m_FileName ) );
158 }
159
160 bool kiIniFile::putInt( const char* key, int val )
161 {
162 ::wsprintf( m_StrBuf, "%d", val );
163 return putStr( key, m_StrBuf );
164 }
165
166 bool kiIniFile::putBool( const char* key, bool val )
167 {
168 return putStr( key, val ? "1" : "0" );
169 }