请问有人用过RegEnumValueEx这个函数吗

winewinder 2003-07-11 12:51:03
我按照msdn上写的,每次运行都是非法错误

而且用FormatMessage都拿不到错误提示的信息

请问有朋友有过类似情况吗?谢谢
...全文
169 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
winewinder 2003-07-18
  • 打赏
  • 举报
回复
多谢各位,问题解决了
msvbvm60 2003-07-18
  • 打赏
  • 举报
回复
我给你一个把3,这代码能 枚举 RUN下所有自动运行程序,很简单的拉

m_list.DeleteAllItems(); //初始化

//run下的启动程序
char m_key[255]="SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run";
HKEY m_hkey;
char m_name[200],m_data[200];
DWORD m_namelen=200,m_datalen=200,m_index=0;
DWORD m_attr=REG_BINARY|REG_DWORD|REG_EXPAND_SZ|REG_MULTI_SZ|REG_NONE|REG_SZ;

if(RegOpenKeyEx(HKEY_LOCAL_MACHINE,m_key,0,KEY_ALL_ACCESS,&m_hkey)==ERROR_SUCCESS)
{

while(RegEnumValue(m_hkey,m_index,m_name,&m_namelen,NULL,&m_attr,(LPBYTE)m_data,&m_datalen)!=ERROR_NO_MORE_ITEMS)
{
m_index++;
m_list.InsertItem(0,m_name);
m_list.SetItemText(0,1,m_data);
m_list.SetItemText(0,2,"Run");
m_namelen=200;
m_datalen=200;

}
RegCloseKey(m_hkey);
}

m_list是个 列表ListCtrl
zzqzzq 2003-07-17
  • 打赏
  • 举报
回复
while((rc=RegEnumKeyEx还应改为while((rc=RegEnumValue
zzqzzq 2003-07-17
  • 打赏
  • 举报
回复
不是语句错误,是结构错误,初步修改如下,有问题再商量.
void ListNetworkCards()
{
HKEY hKey, hQueryKey;
long rc,rs,rq;
DWORD dwSubKeyIndex=0;
char szSubKey[_MAX_FNAME];
DWORD dwSubKeyLength=_MAX_FNAME;
LPSTR CardDescription;
//DWORD dwType;
DWORD bufzize=0;
int CardNum=0;
LPCTSTR NetworkCard = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\";

rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE,NetworkCard,0,KEY_ALL_ACCESS,&hKey);

if( rc != ERROR_SUCCESS)
{
ErrorFunc(3); //indicating no card found
return;
}

//enumerate the keys and the "Description"
while((rc=RegEnumKeyEx(hKey,dwSubKeyIndex,szSubKey,&dwSubKeyLength,NULL,NULL,NULL,NULL)) != ERROR_NO_MORE_ITEMS)
{
CardNum++;
bufzize=256;
RegQueryValueEx(hKey,szSubKey,NULL,NULL,NULL,(LPDWORD) &bufzize);

CardDescription = (LPSTR)malloc(bufzize * sizeof(char));

rq=RegQueryValueEx(hKey,szSubKey,NULL,NULL,(LPBYTE)CardDescription,&bufzize);


if( rq != ERROR_SUCCESS)
{
PERR( "RegQueryValueEx", GetLastError());
printf( "Query error..." );
return;
}
else
{
printf("d%. %s\n", CardNum, CardDescription);
dwSubKeyIndex++;
}
}

RegCloseKey(hKey);
// ErrorFunc(3);

return;
}

zzqzzq 2003-07-17
  • 打赏
  • 举报
回复
再做下列修改试试.
bufzize=256;
if( rs == ERROR_SUCCESS )
{
rq=RegQueryValueEx(//就是这里出错
如果还不对,就要向前搜索错误.
jvcit 2003-07-12
  • 打赏
  • 举报
回复
没见过帮你up一下。
winewinder 2003-07-12
  • 打赏
  • 举报
回复
还是不可以。。。
zzqzzq 2003-07-11
  • 打赏
  • 举报
回复
将DWORD bufzize=0;改为DWORD bufzize=256;并将(LPDWORD) &bufzize改为&bufzize
hanwg 2003-07-11
  • 打赏
  • 举报
回复
换个键值试试
winewinder 2003-07-11
  • 打赏
  • 举报
回复
to mfc168(闶阆)

没有什么错误信息,直接跳出一个窗口说是非法操作,郁闷...
winewinder 2003-07-11
  • 打赏
  • 举报
回复
我定义了一个LPDWORD 的dwType变量作为倒数第三个参数,还是会出错

我想可能不是函数参数的问题,因为编译都可以通过,警告都没有.是不是还有什么...
winewinder 2003-07-11
  • 打赏
  • 举报
回复
The lpType parameter can be NULL if the type is not required.

不需要输出数据类型呀
bjzhaoxiao 2003-07-11
  • 打赏
  • 举报
回复
同意
mafangsan(mafangsan)
mafangsan 2003-07-11
  • 打赏
  • 举报
回复
rq=RegQueryValueEx(//就是这里出错
hQueryKey,
TEXT("Description"),
NULL,
NULL,
NULL,
(LPDWORD) &bufzize);

倒数第三个参数不应该写NULL

mfc168 2003-07-11
  • 打赏
  • 举报
回复
提示的错误信息是什么?这段代码我以前见过,是在一本书里面,可能是API编程的吧,当初我已经编译通过,可执行!
winewinder 2003-07-11
  • 打赏
  • 举报
回复
void ListNetworkCards()
{
HKEY hKey, hQueryKey;
long rc,rs,rq;
DWORD dwSubKeyIndex=0;
char szSubKey[_MAX_FNAME];
DWORD dwSubKeyLength=_MAX_FNAME;
LPSTR CardDescription;
//DWORD dwType;
DWORD bufzize=0;
int CardNum=0;
LPCTSTR NetworkCard = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards";

rc = RegOpenKeyEx(
HKEY_LOCAL_MACHINE,
NetworkCard,
0,
KEY_ALL_ACCESS,
&hKey);

if( rc != ERROR_SUCCESS)
{
ErrorFunc(3); //indicating no card found
return;
}

//enumerate the keys and the "Description"
while((rc=RegEnumKeyEx(
hKey,
dwSubKeyIndex,
szSubKey,
&dwSubKeyLength,
NULL,
NULL,
NULL,
NULL)
) != ERROR_NO_MORE_ITEMS)
{
if(rc == ERROR_SUCCESS) //get the content of "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\NetworkCards\Description"
{
CString QueryKey=CString( NetworkCard )+"\\"+CString( szSubKey );
rs = RegOpenKeyEx( //open the key to see the description of the cards
HKEY_LOCAL_MACHINE,
QueryKey,
0,
KEY_ALL_ACCESS,
&hQueryKey);
CardNum++;
if( rs == ERROR_SUCCESS )
{
rq=RegQueryValueEx(//就是这里出错
hQueryKey,
TEXT("Description"),
NULL,
NULL,
NULL,
(LPDWORD) &bufzize);

CardDescription = (LPSTR)malloc(bufzize * sizeof(char));

rq=RegQueryValueEx(
hQueryKey,
TEXT("Description"),
NULL,
NULL,
(LPBYTE) CardDescription,
&bufzize);


if( rq != ERROR_SUCCESS)
{
PERR( "RegQueryValueEx", GetLastError());
printf( "Query error..." );
return;
}

else
{
printf("d%. %s\n", CardNum, CardDescription);
dwSubKeyIndex++;
}
}
}

else
{
RegCloseKey(hQueryKey);
RegCloseKey(hKey);
ErrorFunc(4);
return;
}
}

RegCloseKey(hQueryKey);
RegCloseKey(hKey);
ErrorFunc(3);

return;
}
c0der 2003-07-11
  • 打赏
  • 举报
回复
最好把代码写一下

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧