Regkey.cpp
上传用户:qzzxgm
上传日期:2009-12-14
资源大小:1882k
文件大小:3k
源码类别:

书籍源码

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #include "Regkey.h"
  3. CRegKey::CRegKey()
  4. {
  5. m_hKey = NULL;
  6. }
  7. CRegKey::~CRegKey()
  8. {
  9. Close();
  10. }
  11. LONG CRegKey::Open (HKEY hKeyRoot, LPCTSTR pszPath)
  12. {
  13. DWORD dw;
  14. m_strPath = pszPath;
  15. return RegCreateKeyEx (hKeyRoot, pszPath, 0L, NULL,
  16. REG_OPTION_VOLATILE, KEY_ALL_ACCESS, NULL, 
  17. &m_hKey, &dw);
  18. }
  19. void CRegKey::Close()
  20. {
  21. if (m_hKey)
  22. {
  23. RegCloseKey (m_hKey);
  24. m_hKey = NULL;
  25. }
  26. }
  27. LONG CRegKey::Write (LPCTSTR pszKey, DWORD dwVal)
  28. {
  29. ASSERT(m_hKey);
  30. ASSERT(pszKey);
  31. return RegSetValueEx (m_hKey, pszKey, 0L, REG_DWORD,
  32. (CONST BYTE*) &dwVal, sizeof(DWORD));
  33. }
  34. LONG CRegKey::Write (LPCTSTR pszKey, LPCTSTR pszData)
  35. {
  36. ASSERT(m_hKey);
  37. ASSERT(pszKey);
  38. ASSERT(pszData);
  39. ASSERT(AfxIsValidAddress(pszData, strlen(pszData), FALSE));
  40. return RegSetValueEx (m_hKey, pszKey, 0L, REG_SZ,
  41. (CONST BYTE*) pszData, strlen(pszData) + 1);
  42. }
  43. LONG CRegKey::Write (LPCTSTR pszKey, const BYTE* pData,
  44.  DWORD dwLength)
  45. {
  46. ASSERT(m_hKey);
  47. ASSERT(pszKey);
  48. ASSERT(pData && dwLength > 0);
  49. ASSERT(AfxIsValidAddress(pData, dwLength, FALSE));
  50. return RegSetValueEx (m_hKey, pszKey, 0L, REG_BINARY,
  51. pData, dwLength);
  52. }
  53. LONG CRegKey::Read (LPCTSTR pszKey, DWORD& dwVal)
  54. {
  55. ASSERT(m_hKey);
  56. ASSERT(pszKey);
  57. DWORD dwType;
  58. DWORD dwSize = sizeof (DWORD);
  59. DWORD dwDest;
  60. LONG lRet = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL, 
  61. &dwType, (BYTE *) &dwDest, &dwSize);
  62. if (lRet == ERROR_SUCCESS)
  63. dwVal = dwDest;
  64. return lRet;
  65. }
  66. LONG CRegKey::Read (LPCTSTR pszKey, CString& sVal)
  67. {
  68. ASSERT(m_hKey);
  69. DWORD dwType;
  70. DWORD dwSize = 200;
  71. char  string[200];
  72. LONG lReturn = RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
  73. &dwType, (BYTE *) string, &dwSize);
  74. if (lReturn == ERROR_SUCCESS)
  75. sVal = string;
  76. return lReturn;
  77. }
  78. LONG CRegKey::Read (LPCTSTR pszKey, BYTE* pData, DWORD& dwLen)
  79. {
  80. ASSERT(m_hKey);
  81. ASSERT(pszKey);
  82. DWORD dwType;
  83. return RegQueryValueEx (m_hKey, (LPSTR) pszKey, NULL,
  84. &dwType, pData, &dwLen);
  85. }
  86. LONG CRegKey::GetEnumKeys(HKEY hKeyRoot, LPCTSTR pszPath, CStringArray &strArray)
  87. {
  88. int  nIndex;
  89. long lRetCode;
  90. char szValue[MAX_PATH];
  91. if ((lRetCode = Open(hKeyRoot, pszPath)) != ERROR_SUCCESS)
  92. return lRetCode;
  93. strArray.RemoveAll();
  94. for (nIndex = 0, lRetCode = ERROR_SUCCESS; lRetCode == ERROR_SUCCESS; nIndex++)
  95. {
  96. lRetCode = RegEnumKey(m_hKey, nIndex, szValue, MAX_PATH);
  97. if (lRetCode == ERROR_SUCCESS)
  98. strArray.Add(szValue);
  99. }
  100. Close();
  101. return ERROR_SUCCESS;
  102. }
  103. LONG CRegKey::GetEnumValues(HKEY hKeyRoot, LPCTSTR pszPath, CStringArray &strArray)
  104. {
  105. int   nIndex;
  106. long  lRetCode;
  107. char  szValue[MAX_PATH];
  108. DWORD dwValue;
  109. if ((lRetCode = Open(hKeyRoot, pszPath)) != ERROR_SUCCESS)
  110. return lRetCode;
  111. strArray.RemoveAll();
  112. for (nIndex = 0, lRetCode = ERROR_SUCCESS; lRetCode == ERROR_SUCCESS; nIndex++)
  113. {
  114. szValue[0] = '';
  115. dwValue    = MAX_PATH;
  116. lRetCode   = RegEnumValue(m_hKey, nIndex, szValue, &dwValue, NULL, NULL, NULL, NULL);
  117. if (lRetCode == ERROR_SUCCESS)
  118. strArray.Add(szValue);
  119. }
  120. Close();
  121. return ERROR_SUCCESS;
  122. }