读书人

怎么使用注册表API修改某一键值

发布时间: 2012-03-30 17:32:09 作者: rapoo

如何使用注册表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的啊!

[解决办法]

C/C++ code
#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);} 

读书人网 >C++ Builder

热点推荐