18 #define REG_QWORD (11)
34 void operator()(HKEY P) { ::RegCloseKey(P); }
95 : m_hhParentKey(hhParentKey), m_dwRegSam(dwRegSam)
108 m_hhParentKey = rg.
GetHandle(lpszSectionName);
109 m_dwRegSam = dwRegSam;
127 m_hhParentKey = hhParentKey;
128 m_strSection.
Empty();
138 return m_hhParentKey;
148 HKEY h = m_hhParentKey;
159 m_SetSectionName(lpszSectionName);
170 return _T(
"Registry");
185 return ::RegFlushKey(m_hhKey) == ERROR_SUCCESS;
195 if ( lpszSectionName == NULL || *lpszSectionName == 0 )
197 return m_EnumSections(m_hhParentKey);
199 m_SetSectionName(lpszSectionName);
204 return m_EnumSections(m_hhKey);
216 DWORD r = ms_RegDeleteKeyNT(m_hhParentKey, lpszSectionName);
218 return r == ERROR_SUCCESS;
229 m_SetSectionName(lpszSectionName);
241 dwNameLength = E_BufferSize;
242 lRc = ::RegEnumValue(
254 if ( lRc == ERROR_NO_MORE_ITEMS )
258 if ( lRc != ERROR_SUCCESS )
277 m_SetSectionName(lpszSectionName);
284 LONG lRc = ::RegQueryValueEx(
293 if ( lRc == ERROR_SUCCESS )
331 switch (
GetKeyKind(lpszSectionName, lpszKey) )
336 vb = m_Query(lpszKey, REG_SZ, REG_EXPAND_SZ, &dwGetType);
341 if ( dwGetType == REG_EXPAND_SZ )
344 DWORD l = ::ExpandEnvironmentStrings(str, NULL, 0);
348 ::ExpandEnvironmentStrings(str, s.
GetBuffer(l + 1), l + 1);
358 vb = m_Query(lpszKey, REG_MULTI_SZ, REG_MULTI_SZ);
367 vb = m_Query(lpszKey, REG_BINARY, REG_BINARY);
374 vb = m_Query(lpszKey, REG_DWORD, REG_DWORD);
377 ASSERTLIB(
sizeof(DWORD) == vb.
GetSize());
382 vb = m_Query(lpszKey, REG_QWORD, REG_QWORD);
385 ASSERTLIB(
sizeof(LONGLONG) == vb.
GetSize());
406 m_SetSectionName(lpszSectionName);
411 r = m_Delete(lpszKey);
416 r = m_Write(lpszKey, REG_SZ, LPCTSTR(s), (s.
GetLength() + 1) *
sizeof(TCHAR));
423 r = m_Write(lpszKey, REG_MULTI_SZ, LPCTSTR(dntstr),
ToDword(dntstr.
GetSize()) *
sizeof(TCHAR));
435 r = m_Write(lpszKey, REG_DWORD, &dw,
sizeof(DWORD));
441 r = m_Write(lpszKey, REG_QWORD, &ll,
sizeof(LONGLONG));
452 enum { E_BufferSize = 1024 };
455 mutable CStr m_strSection;
458 void m_Close(
void)
const
467 LONG m_Create(
void)
const
475 LONG lRc = ::RegCreateKeyEx(
486 if ( lRc == ERROR_SUCCESS )
501 LONG m_Open(
void)
const
508 LONG lRc = ::RegOpenKeyEx(
515 if ( lRc == ERROR_SUCCESS )
526 void m_SetSectionName(LPCTSTR lpszSectionName)
const
528 if ( m_strSection != lpszSectionName )
531 m_strSection = lpszSectionName;
548 dwNameLength = E_BufferSize;
549 lRc = ::RegEnumKeyEx(
561 if ( lRc == ERROR_NO_MORE_ITEMS )
565 if ( lRc != ERROR_SUCCESS )
583 CByteVector m_Query(LPCTSTR lpszKey, DWORD dwTyp1, DWORD dwTyp2, DWORD* _pdwGetType = NULL)
const
593 LONG lRc = ::RegQueryValueEx(
601 if ( lRc != ERROR_SUCCESS )
606 if ( _pdwGetType != NULL )
608 *_pdwGetType = dwType;
610 if ( dwType != dwTyp1 && dwType != dwTyp2 )
617 lRc = ::RegQueryValueEx(
626 if ( lRc != ERROR_SUCCESS )
642 bool m_Write(LPCTSTR lpszKey, DWORD dwTyp, LPCVOID lpcData,
size_t dwLen)
644 LONG lRc = 0xFFFFFFFF;
645 if ( m_Create() == 0 )
647 lRc = ::RegSetValueEx(m_hhKey, lpszKey, NULL, dwTyp,
static_cast<const BYTE*
>(lpcData),
ToDword(dwLen));
649 return (lRc == ERROR_SUCCESS);
657 bool m_Delete(LPCTSTR lpszKey)
659 LONG lRc = 0xFFFFFFFF;
662 lRc = ::RegDeleteValue(m_hhKey, lpszKey);
664 return lRc == ERROR_SUCCESS;
673 static DWORD ms_RegDeleteKeyNT(HKEY hStartKey , LPCTSTR pKeyName)
676 const int MAX_KEY_LENGTH = 256;
681 dwRtn = ::RegOpenKeyEx(hStartKey, pKeyName, 0, KEY_ENUMERATE_SUB_KEYS | DELETE, &hKey);
682 if ( dwRtn == ERROR_SUCCESS )
684 while ( dwRtn == ERROR_SUCCESS )
686 DWORD dwSubKeyLength = MAX_KEY_LENGTH;
687 dwRtn = ::RegEnumKeyEx(
697 if ( dwRtn == ERROR_NO_MORE_ITEMS )
701 dwRtn = ::RegDeleteKey(hStartKey, pKeyName);
704 else if ( dwRtn == ERROR_SUCCESS )
706 dwRtn = ms_RegDeleteKeyNT(hKey, subKey);
718 dwRtn = ERROR_BADKEY;
Double Null Terminate(DNT)型文字列操作関係のヘッダ
Double Null Terminate(DNT)型文字列管理
void Set(LPCTSTR lpszStr)
[設定] 代入
size_t GetSize(void) const
[取得] DNT型文字列数種特
void SetDntStr(LPCTSTR lpszzDntStr, TCHAR tcSepaChar=0)
[設定] 代入
CStrVector ToStrVector(void) const
[取得] 文字列配列取得.
bool IsNull(void) const
[確認] NULLチェック
virtual CStr GetTypeName(void) const
[取得] タイプ名取得
virtual bool Flush(void)
[操作] フラッシュ.
virtual CStrVector EnumKeyNames(LPCTSTR lpszSectionName) const
[取得] 名前一覧取得
bool IsValid(void) const
[取得] 有効確認.
virtual bool WriteValue(LPCTSTR lpszSectionName, LPCTSTR lpszKey, const IAccessor::CValue &value)
[設定] 情報設定
CRegistryAccessor(const CRegKeyHandle &hhParentKey, REGSAM dwRegSam=KEY_ALL_ACCESS)
コンストラクタ
const CRegKeyHandle & GetHandle(LPCTSTR lpszSectionName) const
[取得] 対象ハンドル取得
void SetBase(const CRegKeyHandle &hhParentKey)
[設定] ベース指定
virtual bool DeleteSection(LPCTSTR lpszSectionName)
[削除] 指定セクション削除
const CRegKeyHandle & GetBase(void) const
[取得] 親ハンドル取得
virtual CValue QueryValue(LPCTSTR lpszSectionName, LPCTSTR lpszKey) const
[取得] 情報取得
virtual EKind GetKeyKind(LPCTSTR lpszSectionName, LPCTSTR lpszKey) const
[取得] 情報取種取得
CRegistryAccessor(const CRegKeyHandle &hhParentKey, LPCTSTR lpszSectionName, REGSAM dwRegSam=KEY_ALL_ACCESS)
コンストラクタ
virtual ~CRegistryAccessor(void)
デストラクタ
virtual CStrVector EnumSectionNames(LPCTSTR lpszSectionName=NULL) const
[取得] セクション名一覧取得
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
size_t GetLength(void) const
[取得] 文字列長
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
virtual size_t GetSize(void) const
[取得] サイズ取得
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
void Invalid(void)
[操作] 無効状態にする
bool IsValid(void) const
[確認] 有効チェック
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
CStr QueryString(void) const
[取得] 文字列情報取得
LONGLONG QueryLonglong(void) const
[取得] 数値情報取得
CByteVector QueryData(void) const
[取得] バイナリ情報取得
DWORD QueryDword(void) const
[取得] 数値情報取得
CStrVector QueryPluralStrings(void) const
[取得] 文字列群情報取得
EKind GetKind(void) const
[取得] 情報取種取得
TNB::CPointerHandleBaseT< HKEY, TPhRegCloseKey > CRegKeyHandle
HKEY型ハンドルテンプレート
TNB::CVectorT< CStr > CStrVector
文字列配列管理クラス
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
DWORD ToDword(LPCSTR lpsz, int iBase=10)
[変換] INT変換(ASCII/SJIS用).
@ EK_Dword
32Bit Unsigned Integer
@ EK_PluralStrings
複数の文字列群
@ EK_Longlong
64Bit Signed Integer