How to get the DWORD registry value on local machine?

Hi, I want to retrieve the DWORD registy value in DWORD type variable. Could anyone tell me how to query directly DWORD value and stored it in DWORD type variable. I know how to retrieve string registry key. See attached code.

Thanks.
HKEY lHKeyhandle;
HKEY lhkey;
LONG lRetVal;
char* mykey;
lRetVal = RegConnectRegistry(NULL, HKEY_LOCAL_MACHINE, &lHKeyhandle);
if(lRetVal == ERROR_SUCCESS) {		
	lRetVal = RegOpenKeyEx(lHKeyhandle, "SOFTWARE\\Microsoft\\Software\\MyApp", 0, KEY_QUERY_VALUE, &lhkey);
	if(lRetVal == ERROR_SUCCESS) {  	
		LPBYTE lpData = new BYTE[_MAX_FNAME + 1];
		ZeroMemory(lpData, _MAX_FNAME + 1);
		DWORD lpcbData = _MAX_FNAME;			
                                          lRetVal = RegQueryValueExA(lhkey, TEXT("MyKey"), NULL, NULL, lpData, &lpcbData);
                                          mykey = new char[_MAX_FNAME];
		if(lRetVal == ERROR_SUCCESS)
		    sprintf(mykey, "%s", lpData);		
		RegCloseKey(lhkey);
	}
	RegCloseKey(lHKeyhandle);
}

Open in new window

LVL 1
deshawAsked:
Who is Participating?
 
jkrCommented:
Or, in your code:
HKEY lHKeyhandle;
HKEY lhkey;
LONG lRetVal;
char* mykey;
lRetVal = RegConnectRegistry(NULL, HKEY_LOCAL_MACHINE, &lHKeyhandle);
if(lRetVal == ERROR_SUCCESS) {          
        lRetVal = RegOpenKeyEx(lHKeyhandle, "SOFTWARE\\Microsoft\\Software\\MyApp", 0, KEY_QUERY_VALUE, &lhkey);
        if(lRetVal == ERROR_SUCCESS) {          
                DWORD dwValue;
                
                DWORD lpcbData = sizeof(DWORD);                    
                                          lRetVal = RegQueryValueExA(lhkey, TEXT("MyKey"), NULL, NULL, (LPBYTE) &dwValue, &lpcbData);
                                         
                if(lRetVal == ERROR_SUCCESS)
                    sprintf(mykey, "%d", dwValue);               
                RegCloseKey(lhkey);
        }
        RegCloseKey(lHKeyhandle);
}

Open in new window

0
 
evilrixSenior Software Engineer (Avast)Commented:
http://msdn.microsoft.com/en-us/library/ms724868(VS.85).aspx

LONG WINAPI RegGetValue(
  __in         HKEY hkey,
  __in_opt     LPCTSTR lpSubKey,
  __in_opt     LPCTSTR lpValue,
  __in_opt     DWORD dwFlags,
  __out_opt    LPDWORD pdwType,
  __out_opt    PVOID pvData, //<-------------  &dwData
  __inout_opt  LPDWORD pcbData
);

Pass pvData as the address of a DWORD variable
0
 
deshawAuthor Commented:
Thanks both of you. The posts were helpful. My solution is below and working fine. Let me know if you think there is any amiss.
HKEY lhkey;
LONG lRetVal;
DWORD dwType, dwSize;
//set default value
DWORD mykey= 0;

try {
     if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\MyApp", 0, KEY_QUERY_VALUE, &lhkey) == ERROR_SUCCESS) {
    dwType = REG_DWORD;
    dwSize = sizeof(DWORD);
    RegQueryValueEx(lhkey, TEXT("myRegKey"), NULL, &dwType, (PBYTE)&mykey, &dwSize);
    RegCloseKey(lhkey);
    }
} catch(...) {
//ignore and take default value
}
Thanks.
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
jkrCommented:
You can omit try/catch here, since no C++ exceptions are going to be thrown. SEH might be more appropriate, e.g.
__try {
     if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\MyApp", 0, KEY_QUERY_VALUE, &lhkey) == ERROR_SUCCESS) {
    dwType = REG_DWORD;
    dwSize = sizeof(DWORD);
    RegQueryValueEx(lhkey, TEXT("myRegKey"), NULL, &dwType, (PBYTE)&mykey, &dwSize);
    RegCloseKey(lhkey);
    }
} __except(1) {
//ignore and take default value
} 

Open in new window

0
 
deshawAuthor Commented:
ohh..great..thanks jkr...
0
 
deshawAuthor Commented:
Thanks...
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.