Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从注册表项中提取配置单元和注册表名_C++_Windows_Winapi_Registry - Fatal编程技术网

C++ 如何从注册表项中提取配置单元和注册表名

C++ 如何从注册表项中提取配置单元和注册表名,c++,windows,winapi,registry,C++,Windows,Winapi,Registry,我必须从注册表项和注册表名中提取配置单元,以便在regopen中打开该项 Computer\HKEY\u LOCAL\u MACHINE\SOFTWARE\Mozilla\Firefox 我必须提取HKEY\U LOCAL\u机器和Software\Mozilla\Firefox 是否有任何API将它们提取为wstring wstring keyname = L"HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox"; 如果我理解正确,您只需要将字符串“HKE

我必须从注册表项和注册表名中提取配置单元,以便在regopen中打开该项

Computer\HKEY\u LOCAL\u MACHINE\SOFTWARE\Mozilla\Firefox

我必须提取
HKEY\U LOCAL\u机器
Software\Mozilla\Firefox

是否有任何API将它们提取为
wstring

wstring keyname = L"HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox";

如果我理解正确,您只需要将字符串“HKEY\U LOCAL\U MACHINE\SOFTWARE\Mozilla\Firefox”拆分为子字符串“HKEY\U LOCAL\U MACHINE”和
“SOFTWARE\Mozilla\Firefox”
。没有用于此目的的Win32 API函数,但是您可以使用C++的
std::wstring
类的
find()
substr()
方法,例如:

#包括
std::wstring keyname=…;//“HKEY_LOCAL_MACHINE\\SOFTWARE\\Mozilla\\Firefox”
std::wstring::size\u type pos=keyname.find(L'\\');
if(pos!=std::wstring::npos)
{
std::wstring root=keyname.substr(0,位置);
std::wstring key=keyname.substr(位置+1);
//根据需要使用root和key。。。
}
或者,您可以使用
std::wistringstream
std::getline()

#包括
#包括
std::wstring keyname=…;//“HKEY_LOCAL_MACHINE\\SOFTWARE\\Mozilla\\Firefox”
std::wstring根,键;
标准:wistringstream iss(关键字名称);
if(std::getline(iss,root,L'\\')和&std::getline(iss,key))
{
//根据需要使用root和key。。。
}

使用winapi注册表I/O,事情比简单调用适当的函数更复杂。我建议探讨相关的问题。这是否回答了你的问题@SimonMourier不幸的是,不,我想提取HKLM和key name,以便在regsavekey中使用它。您确切拥有什么,例如:“registry key”是什么意思?(句柄?路径?)您到底想要什么?wstring keyname=L“HKEY_LOCAL_MACHINE\SOFTWARE\Mozilla\Firefox”我有这个,我必须将HKEY_LOCAL_MACHINE提取为配置单元,SOFTWARE\Mozilla\Firefox asa wstring您似乎是注册表专家,我有一个问题要问,这个RegSaveKey是否可以用于管理员以外的其他用户。当用于当前用户时,错误代码:1314说明:客户端不拥有所需的权限。感谢您的关注。我检查了这个问题,我实际使用的是这个逻辑,它适用于管理员,但不适用于用户拯救他自己的香港大学registries@cc125正如那篇文章和MSDN文档所述,调用者需要
SE\u BACKUP\u NAME
特权才能使用
RegSaveKey()
,而
SE\u RESTORE\u NAME
SE\u BACKUP\u NAME
才能使用
RegRestoreKey()
。默认情况下,非管理员根本不具有该权限。因此,您必须在这样做的用户帐户下运行备份代码。无论是管理员,还是安全权限已被调整的非管理员,这取决于您的决定。这就是API的工作原理。否则,您必须手动保存并还原所需的注册表项,这样限制就会减少。除了reg export和import之外,还有其他方法可以保留注册表和注册表项吗restore@cc125你的意思是,除了自己读取密钥并编写自己的文件之外?然后读取文件并写入密钥?不是真的。