我正在尝试找到一种通过一些简单的方法读取注册表字符串的方法。我找到了很多代码,并尝试了所有内容,甚至对其进行了编辑,并尝试自行完成,但这些都不起作用。可以请我给我看一个示例代码
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography
,关键是:
MachineGuid
我正在尝试创建一个仅在笔记本上运行的程序,并且通过从注册表中读取笔记本的唯一ID,然后将其与硬编码的ID进行比较,试图达到这一目的。而且我确实将它编译成.exe,然后以管理员身份运行。
我现在尝试的代码在这里,但是我只有字符串的第一个字符:/
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int main()
{
DWORD dwType = REG_SZ;
HKEY hKey = 0;
char value[1024];
DWORD value_length = 1024;
RegOpenKey(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Cryptography"), &hKey);
RegQueryValueEx(hKey, TEXT("MachineGuid"), NULL, &dwType, (LPBYTE)&value, &value_length);
cout << value;
string pause;
cin >> pause;
return 0;
}
我正在W10上使用Visual Studio 2017 Community Edition。
我会很高兴为您提供帮助^^。
-顺便说一句,对于文本中的任何错误,我们深表歉意。我不太懂英语*:D
======================
[编辑1]
仍然没有运气...:/
试图像这样编辑代码,但是我有点不明白...:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int main()
{
HKEY hKey = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Cryptography"), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
cout << "RegOpenKeyEx = Ok!\n" << endl;
TCHAR buff[255] = { 0 };
DWORD dwType = REG_SZ;
DWORD dwBufSize = 255;
if (RegQueryValueEx(hKey, TEXT("MachineGuid"), 0, &dwType, (UCHAR*)buff, &dwBufSize) == ERROR_SUCCESS)
{
cout << "Buff: " << buff << "\n" << endl;
}
else
{
cout << "Could not get the key!" << endl;
}
RegCloseKey(hKey);
}
else
{
cout << "Error with opening the key!" << endl;
}
system("pause");
}
答案 0 :(得分:0)
您应该第一次使用RegQueryValue / Ex两次以获取在堆上分配的所需缓冲区长度,然后第二次读取缓冲区中的值 许多winapi函数都使用此方法,例如MultiByteToWideChar,WideCharToMultiByte,BCryptEncrypt / Decrypt ...等
答案 1 :(得分:-1)
让它像这样工作:
#include "stdafx.h"
#include <iostream>
#include <string>
#include <Windows.h>
using namespace std;
int main()
{
HKEY hKey = NULL;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, TEXT("SOFTWARE\\Microsoft\\Cryptography"), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
cout << "RegOpenKeyEx = Ok!\n" << endl;
TCHAR buff[256] = { 0 };
DWORD dwType = REG_SZ;
DWORD dwBufSize = 255;
if (RegQueryValueEx(hKey, TEXT("MachineGuid"), 0, &dwType, (LPBYTE)&buff, &dwBufSize) == ERROR_SUCCESS)
{
wcout << "Buff: " << buff << "\n" << endl;
}
else
{
cout << "Could not get the key!" << endl;
}
RegCloseKey(hKey);
}
else
{
cout << "Error with opening the key!" << endl;
}
}