29 AĞUSTOS 2008, Cuma
Nasıl Windows kayıt defterinden bir değeri okumak için
Bazı kayıt defteri değeri (örneğin, HKEY_LOCAL_MACHINE\fin\fan\fin\fan) için anahtarı nasıl vermiş olabilirim:
- Böyle bir anahtar var o güvenli bir şekilde belirlemek.
- Program aracılığıyla (yani kod) değerini almak.
Kayıt defterine bir şey (eğer yardım edersem kariyerim süresince) yazma gibi bir niyetim kesinlikle yok. Eğer kayıt defterinde yanlış yazarsam Vücudumun her zerresi ışık hızında patlayan ilgili dersi geçelim.
C cevapları tercih ederim , ama çoğunlukla sadece değerini almak için özel Windows API büyü ne olduğunu bilmek gerekir.
CEVAP
30 AĞUSTOS 2008, CUMARTESİ
İşte aşağıdaki almak için pseudo-kodu:
- Eğer bir kayıt defteri anahtarı varsa
- Varsayılan değer için ne kayıt defteri anahtarı
- Bir dize değeri nedir
- Bir dize değeri nedir
Örnek kod:
Kütüphane bağımlılığı vardır: 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;
}
Bunu Paylaş:
Nasıl Java standart giriş tamsayı değe...
Nasıl Windows pip yüklemek için?...
Nasıl iPhone için Windows geliştirme m...
bir öğe veri-öznitelik değeri için bir...
Nasıl benim zorlamak için .NET Windows...