2013-04-24 5 views
0
DWORD dwType = REG_SZ; 
TCHAR keyData[1024]; 
DWORD keyDataLength = 1024; 
cchValue = MAX_VALUE_NAME; 
achValue[0] = '\0';  
HKEY currentKey; 
long err = RegOpenKeyEx(HKEY_CURRENT_USER, TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"), NULL, KEY_READ, &currentKey); 
_tprintf(TEXT("OpenKey Error Code: %d\n"), err); 
err = RegQueryValueEx(currentKey, TEXT("STEAM"), NULL, NULL, (LPBYTE)&keyData, &keyDataLength); 
_tprintf(TEXT("QueryKey Error Code: %d\n"), err); 
_tprintf(TEXT("Data: %d\n"), keyData); 

Код выше получается следующий результат:RegQueryValueEx дает странные данные

OpenKey Error Code: 0 
QueryKey Error Code: 0 
Data: 15332432 

Как я могу получить keyData для отображения правильного результата? Я довольно долго смотрел онлайн, и это почти дубликат рабочих примеров, которые я нашел в Интернете ... Он настроен для UNICODE, и я не хочу переключать кодировку.

+0

Что такое «MAX_VALUE_NAME»? –

ответ

3

keyData - это массив из TCHAR. попробуйте напечатать массив символов с помощью %s.

_tprintf(TEXT("Data: %s\n"), keyData); 
        //^^^ not %d 

EDIT Благодаря @Windows programmer

Кроме того, keyDataLength должен считать байт, поэтому он должен быть либо 1024 * sizeof(TCHAR) или более просто sizeof(keyData).

+0

Да. Кроме того, keyDataLength должен считать байты, поэтому он должен быть либо 1024 * sizeof (TCHAR), либо просто sizeof keyData. –

+0

@Windowsprogrammer Спасибо, что указали это, я не заметил, что когда я посмотрел на вывод печати. – taocp

+0

* Facepalm * Большое спасибо, я просто скопировал это из другой части и забыл изменить его ... – Knox

Смежные вопросы