RegSetValueEx函数在注册表项下设置指定值的数据和类型。
LONG RegSetValueEx( HKEY hKey, // handle to key LPCTSTR lpValueName, // value name DWORD Reserved, // reserved DWORD dwType, // value type CONST BYTE *lpData, // value data DWORD cbData // size of value data );
参数
hkey: 当前打开的密钥或以下预定义密钥之一的句柄:
HKEY_CLASSES_ROOT
HKEY_CURRENT_CONFIG
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS
Windows NT/2000/XP: HKEY_PERFORMANCE_DATA
Windows 95/98/Me: HKEY_DYN_DATA
lpValueName:指向一个字符串的指针,该字符串包含要设置的值的名称。如果键中不存在这个名称的值,函数将其添加到键中。如果lpValueName是NULL或空字符串"",函数将为键的未命名或默认值设置类型和数据。
Reserved:保留;必须是零。
dwType:指定由lpData参数指向的数据类型的代码。有关可能类型代码的列表,请参见注册表值类型。
Ipdata:指向一个缓冲区的指针,该缓冲区包含以指定值名存储的数据。对于基于字符串的数据类型,如REG_SZ,字符串必须为空终止。对于REG_MULTI_SZ数据类型,字符串必须以双null结尾。
cbData:指定lpData参数指向的信息的大小(以字节为单位)。如果数据类型为REG_SZ、REG_EXPAND_SZ或REG_MULTI_SZ,则cbData必须包括终止null字符或字符的大小。
返回值
示例代码:
#include<stdio.h>
#include<windows.h>
void main(void)
{
//根键、子键名称和到子键的句柄
HKEY hRoot=HKEY_LOCAL_MACHINE;
char *szSubKey="Software\Microsoft\Windows\CurrentVersion\Run";
HKEY hKey;//打开指定子键
DWORD dwDisposition=REG_OPENED_EXISTING_KEY;
//如果不存在就创建
LONG lRet=RegCreateKeyEx(
hRoot,
szSubkey,
0,
NULL,
REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS,
NULL,
&hKey,
&dwDisposition
);
if(lRet!=ERROR_SUCCESS)
return;
//得到当前执行文件的文件名(包含路径)
char szModule[MAX_PATH];
GetModuleFileName(NULL,szModule,MAX_PATH);
//创建一个新的键值,设置键值数据为文件
lRet=RegSetValueEx(
hKey,
"SelfRunDemo",
0,
REG_SZ,
(BYTE*)szModule,
strlen(szModule)
);
if(lRet==ERROR_SUCCESS)
printf("self run success
");
//关闭子键句柄
RegCloseKey(hKey);