Hier ist ein Pseudocode, um Folgendes abzurufen:
- Wenn ein Registrierungsschlüssel vorhanden ist
- Was ist der Standardwert für diesen Registrierungsschlüssel?
- Was für ein String-Wert ist
- Was für ein DWORD-Wert ist
Beispielcode:
Schließen Sie die Bibliotheksabhängigkeit ein: Advapi32.lib
HKEY hKey;
LONG lRes = RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Perl", 0, KEY_READ, &hKey);
bool bExistsAndSuccess (lRes == ERROR_SUCCESS);
bool bDoesNotExistsSpecifically (lRes == ERROR_FILE_NOT_FOUND);
std::wstring strValueOfBinDir;
std::wstring strKeyDefaultValue;
GetStringRegKey(hKey, L"BinDir", strValueOfBinDir, L"bad");
GetStringRegKey(hKey, L"", strKeyDefaultValue, L"bad");
LONG GetDWORDRegKey(HKEY hKey, const std::wstring &strValueName, DWORD &nValue, DWORD nDefaultValue)
{
nValue = nDefaultValue;
DWORD dwBufferSize(sizeof(DWORD));
DWORD nResult(0);
LONG nError = ::RegQueryValueExW(hKey,
strValueName.c_str(),
0,
NULL,
reinterpret_cast<LPBYTE>(&nResult),
&dwBufferSize);
if (ERROR_SUCCESS == nError)
{
nValue = nResult;
}
return nError;
}
LONG GetBoolRegKey(HKEY hKey, const std::wstring &strValueName, bool &bValue, bool bDefaultValue)
{
DWORD nDefValue((bDefaultValue) ? 1 : 0);
DWORD nResult(nDefValue);
LONG nError = GetDWORDRegKey(hKey, strValueName.c_str(), nResult, nDefValue);
if (ERROR_SUCCESS == nError)
{
bValue = (nResult != 0) ? true : false;
}
return nError;
}
LONG GetStringRegKey(HKEY hKey, const std::wstring &strValueName, std::wstring &strValue, const std::wstring &strDefaultValue)
{
strValue = strDefaultValue;
WCHAR szBuffer[512];
DWORD dwBufferSize = sizeof(szBuffer);
ULONG nError;
nError = RegQueryValueExW(hKey, strValueName.c_str(), 0, NULL, (LPBYTE)szBuffer, &dwBufferSize);
if (ERROR_SUCCESS == nError)
{
strValue = szBuffer;
}
return nError;
}
RegOpenKeyExW
undRegQueryValueExW
auf ihr "Zeichensatz"RegOpenKeyEx
RegQueryValueEx
quelle
CRegKey
klingt wie ATL oder MFC Land.Seit Windows> = Vista / Server 2008 ist RegGetValue verfügbar. Dies ist eine sicherere Funktion als RegQueryValueEx . Keine Notwendigkeit für
RegOpenKeyEx
,RegCloseKey
oderNUL
Abschlussprüfungen von String - Werten (REG_SZ
,REG_MULTI_SZ
,REG_EXPAND_SZ
).Sein Parameter
dwFlags
unterstützt Flags für die Typeinschränkung und füllt den Wertepuffer mit Nullen bei Fehler (RRF_ZEROONFAILURE
) und 32/64-Bit-Registrierungszugriff (RRF_SUBKEY_WOW6464KEY
,RRF_SUBKEY_WOW6432KEY
) für 64-Bit-Programme.quelle
Das Paar RegOpenKey und RegQueryKeyEx wird den Trick machen.
Wenn Sie die MFC CRegKey- Klasse verwenden, ist die Lösung noch einfacher.
quelle
RegQueryValueEx
Dies gibt den Wert an, falls vorhanden, und gibt einen Fehlercode ERROR_FILE_NOT_FOUND zurück, wenn der Schlüssel nicht vorhanden ist.
(Ich kann nicht sagen, ob mein Link funktioniert oder nicht, aber wenn Sie nur nach "RegQueryValueEx" googeln, ist der erste Treffer die msdn-Dokumentation.)
quelle
Diese Konsolen-App listet alle Werte und ihre Daten aus einem Registrierungsschlüssel für die meisten potenziellen Registrierungswerte auf. Es gibt einige seltsame, die nicht oft verwendet werden. Wenn Sie alle unterstützen müssen, erweitern Sie dieses Beispiel, während Sie auf diese Dokumentation zum Registrierungswerttyp verweisen .
Dies sei der Inhalt des Registrierungsschlüssels, den Sie aus einem
.reg
Dateiformat importieren können :Die Konsolen-App selbst:
Erwartete Konsolenausgabe:
quelle
In der Regel sind der Registerschlüssel und der Wert Konstanten im Programm. Wenn ja, finden Sie hier ein Beispiel zum Lesen eines DWORD-Registrierungswerts
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
:Informationen zum Anpassen für andere Werttypen finden Sie unter https://docs.microsoft.com/en-us/windows/win32/api/winreg/nf-winreg-reggetvaluea .
quelle
quelle