首页 > 解决方案 > 如何在 C++ 中从注册表中读取 QWORD(64 位)?

问题描述

如何从注册表中读取 REG_QWORD?最具体地说是 HardwareInformation.qwMemorySize 。我发现用它除以 1024 然后再除以 1024 你可以得到以兆字节为单位的视频内存。如何先阅读 QWORD?我只能找到如何阅读 DWORD。

标签: c++dword

解决方案


您读取 aQWORD的方式与读取 a 的方式完全相同DWORD,使用RegQueryValueEx()64 位整数变量而不是 32 位整数变量,例如:

HKEY hKey;
if (RegOpenKeyEx(..., KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) {
    QWORD value = 0; // or UINT64, ULONGLONG, ULONG64, ULARGE_INTEGER, etc...
    DWORD dwType, dwSize = sizeof(value);

    if (RegQueryValueEx(hKey, _T("HardwareInformation.qwMemorySize"), NULL, &dwType, reinterpret_cast<LPBYTE>(&value), &dwSize) == ERROR_SUCCESS) {
        if (dwType == REG_QWORD || dwType == REG_BINARY) {
            // use value as needed...
        }
    }

    RegCloseKey(hKey);
}

或者,RegGetValue()改为使用:

QWORD value = 0; // see above...
DWORD dwSize = sizeof(value);

if (RegGetValue(hkey, NULL, _T("HardwareInformation.qwMemorySize"), RRF_RT_QWORD, NULL, &value, &dwSize) == ERROR_SUCCESS) {
    // use value as needed...
}

推荐阅读