SORU
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:

  1. Böyle bir anahtar var o güvenli bir şekilde belirlemek.
  2. 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:

  1. Eğer bir kayıt defteri anahtarı varsa
  2. Varsayılan değer için ne kayıt defteri anahtarı
  3. Bir dize değeri nedir
  4. 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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • modica89

    modica89

    24 HAZİRAN 2007
  • MW Technology

    MW Technolog

    28 EKİM 2009
  • steven johns

    steven johns

    11 Mart 2011