Windows API一日一练 64 RegSetValueEx和RegDeleteValue函数
Posted skiwnchh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows API一日一练 64 RegSetValueEx和RegDeleteValue函数相关的知识,希望对你有一定的参考价值。
上一次说到怎么创建注册表的键,但接着下来的问题就是怎么样保存数据到注册表里。注册表使用树形的方式管理数据,所以它的扩展和访问都是比较灵活的。不过注册表是系统重要信息库,每当Windows系统加载时,都首先从硬盘里读取它出来,才知道每台电脑所有硬件配置信息,然后再加载不同的驱动程序。因此,注册表作为系统重要的文件,不要往里面写超过2K的数据大小,这样可以提高系统的速度。下面就来介绍一下怎么样保存一个字符串的键值。它需要使用RegSetValueEx函数来设置键值和使用RegDeleteValue函数来删除原来的键值。
函数RegSetValueEx和RegDeleteValue声明如下:
WINADVAPI
LONG
APIENTRY
RegSetValueExA (
__in HKEY hKey,
__in_opt LPCSTR lpValueName,
__reserved DWORD Reserved,
__in DWORD dwType,
__in_bcount_opt(cbData) CONST BYTE* lpData,
__in DWORD cbData
);
WINADVAPI
LONG
APIENTRY
RegSetValueExW (
__in HKEY hKey,
__in_opt LPCWSTR lpValueName,
__reserved DWORD Reserved,
__in DWORD dwType,
__in_bcount_opt(cbData) CONST BYTE* lpData,
__in DWORD cbData
);
#ifdef UNICODE
#define RegSetValueEx RegSetValueExW
#else
#define RegSetValueEx RegSetValueExA
#endif // !UNICODE
WINADVAPI
LONG
APIENTRY
RegDeleteValueA (
__in HKEY hKey,
__in_opt LPCSTR lpValueName
);
WINADVAPI
LONG
APIENTRY
RegDeleteValueW (
__in HKEY hKey,
__in_opt LPCWSTR lpValueName
);
#ifdef UNICODE
#define RegDeleteValue RegDeleteValueW
#else
#define RegDeleteValue RegDeleteValueA
#endif // !UNICODE
hKey是主键。
lpValueName是键名称。
dwType是键值类型。
lpData是键的数据。
cbData是键值的大小。
调用函数的例子如下:
#001 //打注册表。HKEY_CURRENT_USER/"Software"/"Wincpp"/"testreg"
#002 // /"Windows"//"winsize" = "800*600"
#003 //蔡军生 2007/11/04 QQ:9073204 深圳
#004 BOOL WriteProfileString(LPCTSTR lpszSection, LPCTSTR lpszEntry,
#005 LPCTSTR lpszValue)
#006 {
#007 //
#008 LONG lResult;
#009 if (lpszEntry == NULL) //删除整键。
#010 {
#011 HKEY hAppKey = GetAppRegistryKey();
#012 if (hAppKey == NULL)
#013 {
#014 return FALSE;
#015 }
#016
#017 lResult = ::RegDeleteKey(hAppKey, lpszSection);
#018 RegCloseKey(hAppKey);
#019 }
#020 else if (lpszValue == NULL)
#021 {
#022 //删除键值。
#023 HKEY hAppKey = GetAppRegistryKey();
#024 if (hAppKey == NULL)
#025 {
#026 return FALSE;
#027 }
#028
#029 HKEY hSecKey = NULL;
#030 DWORD dw;
#031 RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
#032 REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
#033 &hSecKey, &dw);
#034 RegCloseKey(hAppKey);
#035
#036 if (hSecKey == NULL)
#037 {
#038 return FALSE;
#039 }
#040
#041 //
#042 lResult = ::RegDeleteValue(hSecKey, (LPTSTR)lpszEntry);
#043 RegCloseKey(hSecKey);
#044 }
#045 else
#046 {
#047 //设置键值。
#048 HKEY hAppKey = GetAppRegistryKey();
#049 if (hAppKey == NULL)
#050 {
#051 return FALSE;
#052 }
#053
#054 HKEY hSecKey = NULL;
#055 DWORD dw;
#056 //创建子键。
#057 RegCreateKeyEx(hAppKey, lpszSection, 0, REG_NONE,
#058 REG_OPTION_NON_VOLATILE, KEY_WRITE|KEY_READ, NULL,
#059 &hSecKey, &dw);
#060 RegCloseKey(hAppKey);
#061
#062 if (hSecKey == NULL)
#063 {
#064 return FALSE;
#065 }
#066
#067 //设置子键中的项值。
#068 lResult = RegSetValueEx(hSecKey, lpszEntry, NULL, REG_SZ,
#069 (LPBYTE)lpszValue, (lstrlen(lpszValue)+1)*sizeof(TCHAR));
#070 RegCloseKey(hSecKey);
#071 }
#072 return lResult == ERROR_SUCCESS;
#073
#074 }
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed
以上是关于Windows API一日一练 64 RegSetValueEx和RegDeleteValue函数的主要内容,如果未能解决你的问题,请参考以下文章
Windows API一日一练 91 GetProcessMemoryInfo函数
Windows API一日一练 83 GetModuleFileName函数
Windows API一日一练 7 ShowWindow函数
Windows API一日一练 25 CreateSolidBrush函数
Windows API一日一练 5 RegisterClass和RegisterClassEx函数
Windows API一日一练 46 EnterCriticalSection和LeaveCriticalSection