Проблема моя сотоит в том что вот этот код не работает Code: #include <windows.h> #include <stdio.h> #include <conio.h> main() { HKEY hKey;char szProductType[32]; DWORD dwBufLen=32; RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_EXECUTE,&hKey); if(RegQueryValueEx(hKey,"test",NULL,NULL,szProductType,&dwBufLen) != ERROR_SUCCESS) { printf("no k \n"); getch(); } } RegQueryValueEx даже если есть запись с нужным именем невозращает ERROR_SUCCESS.Где я мог допустить ляп?
LONG RegQueryValueEx( HKEY hKey, // handle of key to query LPTSTR lpValueName, // address of name of value to query LPDWORD lpReserved, // reserved LPDWORD lpType, // address of buffer for value type LPBYTE lpData, // address of data buffer LPDWORD lpcbData // address of data buffer size ); у тебя LPDWORD lpType нулю равен
Переписал вот так Code: #include <windows.h> #include <stdio.h> #include <conio.h> main() { HKEY hKey;char szProductType[32]; DWORD dwBufLen=32;char ktp[]="REG_SZ"; RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&hKey); if(RegQueryValueEx(hKey,"mt",NULL,(LPDWORD)ktp,szProductType,&dwBufLen) != ERROR_SUCCESS) { printf("no k \n"); getch(); } } Непомогло.Может кто нибудь даст ссылку на рабочий пример?
У меня работает Code: HKEY Key; char szProductType[132]; DWORD dwBufLen=132; DWORD ktp =REG_SZ; // так работает RegOpenKeyExA(HKEY_LOCAL_MACHINE,"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",0,KEY_ALL_ACCESS,&Key); if(RegQueryValueExA(Key,"kav",NULL,&ktp,(LPBYTE)szProductType,&dwBufLen) != ERROR_SUCCESS) {printf("no k \n");} else {printf(szProductType);} getch(); return 0;
char ktp[]="REG_SZ"; я, б*я, говорил что надо указать константу REG_SZ а не указатель на строку "REG_SZ" эх вы молодежь, все это от нечитания msdn.
Мистика какая то в одном случае работает http://img181.imageshack.us/img181/9531/tk2qb5.jpg .В другом случае неработает хоть запись с нужным именем в разделе реестра присутствует http://img181.imageshack.us/img181/4186/tk1sz5.jpg
Действительно просто содержимое в буфере не помещалось PS:у меня возник ещё один вопрос как прочитать значение отличающиеся от REG_SZ к примеру REG_DWORD.Какими для этого должны быть pData, lpcbData.Если я делаю так (LPBYTE)&szProductType когда szProductType типа DWORD то получаю ошибку о том что нельзя преобразовать unsigned long в unsigned long* .Может кто нибудь привести заведомо рабочий пример отличный от того что на мсдн?