1

RegQueryValueEx() 関数に問題があります
。これを使用すると、*lpData が 0 で埋められます。

LONG WINAPI RegQueryValueEx(
  _In_         HKEY hKey,
  _In_opt_     LPCTSTR lpValueName,
  _Reserved_   LPDWORD lpReserved,
  _Out_opt_    LPDWORD lpType,
  _Out_opt_    LPBYTE lpData,
  _Inout_opt_  LPDWORD lpcbData
);

これが機能しないコードです

#include <windows.h>
#include <stdio.h>

int             main()
{
    HKEY        hKey = NULL;
    DWORD       data = 42;
    DWORD       type = REG_DWORD;
    DWORD       size = sizeof(DWORD);
    LONG        result;

    result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ, &hKey);
    if(result == ERROR_SUCCESS)
    {
        result = RegQueryValueEx(hKey, "InstallDate", NULL, &type, (LPBYTE)&data, &size);
        RegCloseKey(hKey);
        if (result == ERROR_SUCCESS)
            printf("The value is : %d\n", data);
    }
    return (0);
}

出力:

値: 0

Visual Studio 2012 を使用しており、Win7 を実行しています


編集:修正された行

result = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion", 0, KEY_READ | KEY_WOW64_64KEY, &hKey);

@David Heffernanに感謝

4

1 に答える 1