दिलचस्प पोस्ट
पीएचपी की जांच अगर फाइल एक छवि है जावा: मैं कैसे एक प्रकार के एक चर से गतिशील कास्टिंग कर सकता हूँ? कोको में स्ट्रिंग पर MD5 हैश का उपयोग करना? एंड्रॉइड में एक अनुरोध में एक छवि और ऑडियो अपलोड करें -सभी_लोड लिंकर झंडा क्या करता है? क्या मुझे `आईज़ुड 'या` इज़ुड' == झूठी 'का उपयोग करना चाहिए? HTML5 वीडियो अवधि को पुनः प्राप्त करने में समस्या आर में एक चरित्र वेक्टर से उद्धरण निकालें HTTP 1.0 बनाम 1.1 जीएनयू मेक के साथ सीमके का उपयोग करना: मैं सटीक आदेश कैसे देख सकता हूं? Iquatable और बस ओवरराइड ऑब्जेक्ट के बीच अंतर क्या है। एक्वा ()? जीसीसी में स्थिर और गतिशील रूप से जुड़े लाइब्रेरी दोनों का उपयोग करें C99 में सरणी अनुक्रमणिका के लिए प्रकार "Git init" और "git init -bare" के बीच अंतर क्या है? बहुत बड़ी डेटाबेस फ़ाइलों के साथ SQLite की कार्यक्षमता क्या है?

Windows रजिस्ट्री से मान कैसे पढ़ा जाए

कुछ रजिस्ट्री मान (जैसे HKEY_LOCAL_MACHINE \ blah \ blah \ blah \ foo) के लिए कुंजी को देखते हुए मैं कैसे कर सकता हूँ:

  1. सुरक्षित रूप से निर्धारित करें कि ऐसी कुंजी मौजूद है।
  2. प्रोग्रामेटिक रूप से (कोड के साथ) इसका मूल्य मिलता है

मेरे पास पूरी तरह से रजिस्ट्री पर कुछ लिखने का कोई इरादा नहीं है (यदि मैं इसे मदद कर सकता हूं तो मेरे कैरियर की अवधि के लिए) तो अगर हम रजिस्ट्री को गलत तरीके से लिखते हैं तो हम प्रकाश की गति पर विस्फोट कर मेरे शरीर में हर अणु के बारे में व्याख्यान छोड़ सकते हैं।

सी ++ में जवाब पसंद करते हैं, लेकिन अधिकतर सिर्फ यह जानना जरूरी है कि मूल्य पर प्राप्त करने के लिए विशेष विंडोज़ एपीआई आवृत्ति क्या है?

Solutions Collecting From Web of "Windows रजिस्ट्री से मान कैसे पढ़ा जाए"

निम्नलिखित को प्राप्त करने के लिए यहां कुछ छद्म-कोड है:

  1. यदि एक रजिस्ट्री कुंजी मौजूद है
  2. उस रजिस्ट्री कुंजी के लिए डिफ़ॉल्ट मान क्या है
  3. क्या एक स्ट्रिंग मान है
  4. क्या एक DWORD मूल्य है

उदाहरण कोड:

लाइब्रेरी निर्भरता शामिल करें: 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; } 
 const CString REG_SW_GROUP_I_WANT = _T("SOFTWARE\\My Corporation\\My Package\\Group I want"); const CString REG_KEY_I_WANT= _T("Key Name"); CRegKey regKey; DWORD dwValue = 0; if(ERROR_SUCCESS != regKey.Open(HKEY_LOCAL_MACHINE, REG_SW_GROUP_I_WANT)) { m_pobLogger->LogError(_T("CRegKey::Open failed in Method")); regKey.Close(); goto Function_Exit; } if( ERROR_SUCCESS != regKey.QueryValue( dwValue, REG_KEY_I_WANT)) { m_pobLogger->LogError(_T("CRegKey::QueryValue Failed in Method")); regKey.Close(); goto Function_Exit; } // dwValue has the stuff now - use for further processing 

जोड़ी RegOpenKey और RegQueryKeyEx चाल करेंगे

यदि आप एमएफसी सीएजीकेई क्लास का उपयोग करते हैं तो इससे भी आसान समाधान होता है।

RegQueryValueEx

यह मान देता है अगर यह मौजूद है, और त्रुटि कोड ERROR_FILE_NOT_FOUND देता है यदि कुंजी मौजूद नहीं है।

(मैं यह नहीं बता सकता कि मेरा लिंक काम कर रहा है या नहीं, लेकिन यदि आप "RegQueryValueEx" के लिए केवल पहली हिट है तो एमएसडीएन दस्तावेज़ीकरण है।)

  #include <windows.h> #include <map> #include <string> #include <stdio.h> #include <string.h> #include <tr1/stdint.h> using namespace std; void printerr(DWORD dwerror) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwerror, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); // Process any inserts in lpMsgBuf. // ... // Display the string. if (isOut) { fprintf(fout, "%s\n", lpMsgBuf); } else { printf("%s\n", lpMsgBuf); } // Free the buffer. LocalFree(lpMsgBuf); } bool regreadSZ(string& hkey, string& subkey, string& value, string& returnvalue, string& regValueType) { char s[128000]; map<string,HKEY> keys; keys["HKEY_CLASSES_ROOT"]=HKEY_CLASSES_ROOT; keys["HKEY_CURRENT_CONFIG"]=HKEY_CURRENT_CONFIG; //DID NOT SURVIVE? keys["HKEY_CURRENT_USER"]=HKEY_CURRENT_USER; keys["HKEY_LOCAL_MACHINE"]=HKEY_LOCAL_MACHINE; keys["HKEY_USERS"]=HKEY_USERS; HKEY mykey; map<string,DWORD> valuetypes; valuetypes["REG_SZ"]=REG_SZ; valuetypes["REG_EXPAND_SZ"]=REG_EXPAND_SZ; valuetypes["REG_MULTI_SZ"]=REG_MULTI_SZ; //probably can't use this. LONG retval=RegOpenKeyEx( keys[hkey], // handle to open key subkey.c_str(), // subkey name 0, // reserved KEY_READ, // security access mask &mykey // handle to open key ); if (ERROR_SUCCESS != retval) {printerr(retval); return false;} DWORD slen=128000; DWORD valuetype = valuetypes[regValueType]; retval=RegQueryValueEx( mykey, // handle to key value.c_str(), // value name NULL, // reserved (LPDWORD) &valuetype, // type buffer (LPBYTE)s, // data buffer (LPDWORD) &slen // size of data buffer ); switch(retval) { case ERROR_SUCCESS: //if (isOut) { // fprintf(fout,"RegQueryValueEx():ERROR_SUCCESS:succeeded.\n"); //} else { // printf("RegQueryValueEx():ERROR_SUCCESS:succeeded.\n"); //} break; case ERROR_MORE_DATA: //what do I do now? data buffer is too small. if (isOut) { fprintf(fout,"RegQueryValueEx():ERROR_MORE_DATA: need bigger buffer.\n"); } else { printf("RegQueryValueEx():ERROR_MORE_DATA: need bigger buffer.\n"); } return false; case ERROR_FILE_NOT_FOUND: if (isOut) { fprintf(fout,"RegQueryValueEx():ERROR_FILE_NOT_FOUND: registry value does not exist.\n"); } else { printf("RegQueryValueEx():ERROR_FILE_NOT_FOUND: registry value does not exist.\n"); } return false; default: if (isOut) { fprintf(fout,"RegQueryValueEx():unknown error type 0x%lx.\n", retval); } else { printf("RegQueryValueEx():unknown error type 0x%lx.\n", retval); } return false; } retval=RegCloseKey(mykey); if (ERROR_SUCCESS != retval) {printerr(retval); return false;} returnvalue = s; return true; }