如何使用注册表API修改某一键值? - C++ Builder / Windows SDK/API
我想直接添加一个自启动的程序,怎么老出错啊?
谢谢各位先。
实例代码如下:
HKEY hKey;
DWORD lpType;
/*注册表键的类型
REG_NONE =0;
REG_SZ =1;字符串
REG_EXPAND_SZ =2;可展开式字符串
REG_BINARY =3;
REG_DWORD =4;
REG_DWORD_BIG_ENDIAN =5;
REG_MULTI_SZ =7;多重字符串
*/
LPBYTE lpData = new BYTE[MAX_PATH];
DWORD lpcbData = MAX_PATH;
LONG Flag;
AnsiString N,NN;
N = "FirstRun";
NN = "A" + N + "A";
NN[1] = char('"');//为了修改成"
NN[13] = char('"');
//如果该项存在,就打开,如果不存在就创建。
Flag = RegCreateKey(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\windows\\currentversion\\run",&hKey);
if (Flag == 0)
{
//我这里,不管原来有没有,这次都添加或者更新
lpType = 1;
Flag = RegSetValue(hKey,N.c_str(),lpType,NN.c_str(),NN.Length());
if (Flag == 0)
{
...//成功
}
}
//关闭键
RegCloseKey(hKey);
这样老在RUN下又创建了一个子项,在他的子项的“默认”中,有数据。
如果我把 第二个参数 N.c_str() 改为"",就是在run下的“默认”中,有数据。
我想在run下,有自己的项。
谢谢啦!
说明啊,不适用VCL控件的,就是用API的啊!
[解决办法]
#include <tchar.h>void __fastcall TForm1::Button1Click(TObject *Sender){ HKEY hk; TCHAR szPath[] = TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"); TCHAR szText[] = TEXT("测试哈哈"); if (::RegOpenKey(HKEY_LOCAL_MACHINE, szPath, &hk) == ERROR_SUCCESS) { ::RegSetValueEx(hk, TEXT(""), NULL, REG_SZ, szText, _tcslen(szText)); } ::RegCloseKey(hk);}