Rejestr w Visual Basic C++ 2010

0

Witam wszystkich,
mam problem, ponieważ dużo sie naczytałem, dużo nawklejałem i nic. W Visial c++ Ani TRegistry, ani RegSetValueEx nie działa. Nigdzie nie podali jakich include trzeba (ew. za mało podali, ponieważ samo windows.h nie pomaga). Chodzi o to że żadnej z funkcji (RegSetValueEx itd.) kompilator nie rozpoznaje. Przykladowy błąd:

'RegSetValueEx': identifier not found

Nie mam pojęcia co robić. Bardzo chcę zedytować wartość REG_SZ w rejestrze za pomocą C++, lecz tego nie potrafię. Proszę kogoś z was o pomoc tj. wytłumaczenie jak używać i czego w visual c++ oraz co dokładnie zrobić aby zmienić 1 wpis.

Pozdrawiam i czekam na odpowiedź.

2
0

Dziękuję za odpowiedź. Poczytałem, wrzuciłem do linkera i poszło. Teraz 2 sprawa. Klucz otwiera sie prawidłowo. Teraz chce zmienić wartość PlayerName na jakiś nick. Oto błąd:

cannot convert parameter 5 from 'const char [13]' to 'const BYTE *'

Mój kod:

if(RegSetValueExW(key,LPCWSTR("PlayerName"),NULL, REG_SZ, "[]Damianos[]", 12)==ERROR_SUCCESS)

Nie rozumiem tego dokładnie. Wyczytałem że 5 argument ma być wartością jaką ma przyjąć PlayerName.

Pozdrawiam i czekam na odpowiedź.

0

Już sobie z tym poradziłem. Teraz chcę wyświetlić wartość z pewnego wpisu z rejestru. Niby wszystko ok, wyświetla sie messagebox - czyli pobrało wartość, ale... wartosc jest pusta. Oto kod:

HKEY key22;
			char *wartosc;
			ZeroMemory( &wartosc, sizeof( wartosc ) );
			DWORD typ_danych=REG_SZ;
			if(RegOpenKeyExA(HKEY_CURRENT_USER,"Software\\SAMP_Nick_Changer",0,KEY_ALL_ACCESS,&key22)==ERROR_SUCCESS)
			{
				if(RegQueryValueEx(key22,"Nick_1",0,&typ_danych,(BYTE *)wartosc,0)==ERROR_SUCCESS)
				{
					String^ message = gcnew String((const wchar_t *)wartosc);
					String^ caption = "SA-MP Nick Changer by Damianos";
					MessageBoxButtons buttons = MessageBoxButtons::OK;
					MessageBoxIcon icons = MessageBoxIcon::Information;
					System::Windows::Forms::DialogResult result;
					result = MessageBox::Show( this, message, caption, buttons, icons);
				}
				RegCloseKey(key22);
			}
0

Mieszasz stringi i funkcje unikodowe z nie-unikodowymi. To raz. Trzymaj się unikodu.

Dwa, że pod RegQueryValueEx nie możesz tak sobie podać wyzerowanego wskaźnika, tylko wskaźnik na zaalokowaną pamięć do wypełnienia. Ostatni parametr też nie może być zero.

HKEY key22;
wchar_t wartosc[256];
DWORD len = 255; // jeden mniej, miejsce dla znaku null

if(RegOpenKeyEx(HKEY_CURRENT_USER, L"Software\\SAMP_Nick_Changer", 0, KEY_ALL_ACCESS, &key22)==ERROR_SUCCESS)
{
	if(RegQueryValueEx(key22,L"Nick_1",0,NULL,(BYTE*)wartosc, &len)==ERROR_SUCCESS)
	{
		wartosc[len] = '\0';
		String^ message = gcnew String(wartosc);
		String^ caption = "SA-MP Nick Changer by Damianos";
		MessageBoxButtons buttons = MessageBoxButtons::OK;
		MessageBoxIcon icons = MessageBoxIcon::Information;
		System::Windows::Forms::DialogResult result;
		result = MessageBox::Show( nullptr, message, caption, buttons, icons);
	}
	RegCloseKey(key22);
}
0

Dzięki za pomoc. Zamiast L użyłem (LCPSTR) ponieważ błąd był. Ale juz wszystko ok. Tylko pytanko mam: Dałem to pod this->textBox2->name = L"textBox2" i jak przechodze na formę programu (do tego designu) to jest tam pewien błąd że w złym miejscu użyte HKEY. Gdzie mam to wrzucić, aby pobrało wartość i wywaliło MessageBox od razu przy starcie programu ?

0

W zdarzeniu Form.Load. Nie mieszaj w kodzie automatycznie generowanym, bo designer się pogubi.

1 użytkowników online, w tym zalogowanych: 0, gości: 1