Stu*_*ntX 7 c++ winapi windows-7
我试图在c ++中读取Windows 7中注册表的"(默认)"值,以下是我正在使用的代码:
string GetSZValueUnique( HKEY openKey, const char* regkey, const char* keyName )
{
HKEY hKey = 0;
BYTE data[512] ;
DWORD szsize = 512 ;
string value ;
LONG retValue = RegOpenKeyEx( openKey, regkey, 0, KEY_READ, &hKey ) ;
if ( retValue == ERROR_SUCCESS )
{
LONG retV = RegQueryValueEx( hKey, keyName, 0, 0, data, &szsize ) ;
if ( retV == ERROR_SUCCESS )
{
char* _value = reinterpret_cast<char*>(data) ;
value = _value ;
RegCloseKey (hKey) ;
return value ;
}
else
{
char msg[512] ;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
error_string = &msg[0];
MessageBox( 0, error_string.c_str(), "Query : GetSZValueUnique", 0 );
}
}
else
{
char msg[512] ;
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,0,(DWORD)retV,0,&msg[0],512,0) ;
error_string = &msg[0];
MessageBox( 0, error_string.c_str(), "Open : GetSZValueUnique", 0 );
}
RegCloseKey (hKey) ;
return "" ;
}
Run Code Online (Sandbox Code Playgroud)
这就是我调用上述函数的方式:
string ts3 = GetSZValueUnique( HKEY_LOCAL_MACHINE, "SOFTWARE\\TeamSpeak 3 Client\\", "" );
if ( !ts3.empty() )
MessageBox( 0, ts3.c_str(), "GetSZValueUnique", 0 );
Run Code Online (Sandbox Code Playgroud)
对于某些键,它适用于某些键不适用:例如,它适用于"Adobe","TrendMicro","CheckPoint","RegisteredApplications",但不适用于"7-Zip","RTLSetup","Sonic", "TeamSpeak 3客户端"
我现在没有想法,有人可以指出什么是错的吗?
编辑:我已经检查了代码与"(默认)"值和其他值,对于键不工作它永远不会超过*"if(retValue == ERROR_SUCCESS)"*检查,我总是得到" 指定的文件没有发现 "错误.对于其工作的密钥,它通过"*if(retValue == ERROR_SUCCESS)*"检查并返回该值,如果它不存在,它只是显示错误消息" 未找到指定的文件 ".
编辑2:我再次检查:似乎它的工作密钥在SOFTWARE下的"Wow6432Node"子项中有相应的克隆...嗯...所以我该如何使它工作?
你可以指定标志::
注意:: @WhozCraig在评论中已经通过合适的链接清除了您的疑问.如果他回答,请接受他对我的回答.