关于RegEnumValue,这段代码怎么改? 目的是获得启动项

来源:百度知道 编辑:UC知道 时间:2024/06/18 22:51:38
HKEY hkey;
TCHAR RegBufferCurrent[100];
TCHAR RegBufferLocal[100];
DWORD dwSize=100;
DWORD dIndex=0;

RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_ALL_ACCESS,&hkey);

while(RegEnumValue(hkey,dIndex,RegBufferCurrent,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)
{
LSTCURRENT.AddString (&RegBufferCurrent[dIndex]);
dIndex++;
}

RegCloseKey( hkey);

dIndex=0;

RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_ALL_ACCESS,&hkey);

while(RegEnumValue(hkey,dIndex,RegBufferLocal,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)
{
LSTLOCAL.AddString (&RegBufferLocal[dIndex]);
dIndex++;
}

RegCloseKey( hkey);

原代码有两处错误,下面的代码是改正了的:
#include<windows.h>
#include<iostream>
using namespace std;
int main()
{
HKEY hkey;
TCHAR RegBufferCurrent[100];
TCHAR RegBufferLocal[100];
DWORD dwSize=100;
DWORD dIndex=0;

RegOpenKeyEx(HKEY_CURRENT_USER,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_ALL_ACCESS,&hkey);

while(RegEnumValue(hkey,dIndex,RegBufferCurrent,&dwSize,NULL,NULL,NULL,NULL)==ERROR_SUCCESS)
{
LSTCURRENT.AddString(RegBufferCurrent);//该处字符串缓冲区引用方法是错误的,应该是缓冲区的首地址
dwSize=100;//RegEnumValue函数会修改这个值为注册表键值的长度,所以应该再次赋给它100
dIndex++;
}

RegCloseKey( hkey);

dIndex=0;
dwSize=100;

RegOpenKeyEx(HKEY_LOCAL_MACHINE,TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),0,KEY_ALL_ACCESS,&hkey);

while(RegEnumValue(hkey,dI