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

  • Andrey Menshikov

    Andrey Mensh

    28 Ocak 2012
  • Curso Online Gratuito

    Curso Online

    4 Aralık 2011
  • expertvillage

    expertvillag

    5 NİSAN 2006