C ++读取注册表字符串(一些简单的方法)

时间:2018-07-07 12:43:28

标签: c++ windows visual-studio registry

我正在尝试找到一种通过一些简单的方法读取注册表字符串的方法。我找到了很多代码,并尝试了所有内容,甚至对其进行了编辑,并尝试自行完成,但这些都不起作用。可以请我给我看一个示例代码

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");

}

2 个答案:

答案 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;

    }

}