[C++]Dodawanie do rejestru "REG_DWORD"


(Premiertomas) #1

Witam,

Mam taki oto kod:

#include 

#include 

#include 


int main() {


HKEY reg;

LPCTSTR str="Software\\Classes\\VirtualStore\\MACHINE\\SOFTWARE\\KULKI" ;


if(RegOpenKeyEx(HKEY_CURRENT_USER,str,0,KEY_ALL_ACCESS,®)==ERROR_SUCCESS)

{

LPCTSTR buffer="10";

if(RegSetValueEx(reg,"Nazwa",0,[b]REG_SZ[/b],(LPBYTE)buffer,strlen(buffer))==ERROR_SUCCESS)

{

std::cout << "Sukces" << std::endl;

_getch();

}

RegCloseKey(reg) ;

}

}

Wszystko ładnie działa tylko jak zmienię z REG_SZ na REG_DWORD to w rejestrze pisze "niewlasciwa wartosc DWORD 32-bitowa"


(MietekN) #2

Dla zgodności typów zamień:

LPCTSTR buffer="10";

na:

DWORD wartosc=10;

i

if(RegSetValueEx(reg,"Nazwa",0,REG_SZ,(LPBYTE)buffer,strlen(buffer))==ERROR_SUCCESS)

na:

if(RegSetValueEx(reg,"Nazwa",0,REG_DWORD,&wartosc,sizeof(DWORD))==ERROR_SUCCESS)


(Premiertomas) #3

No to mam teraz error:


(Fiołek) #4
(LPBYTE)&wartosc

(Premiertomas) #5

Dzięki działa.

-- Dodane 29.01.2011 (So) 15:06 --

A teraz mam drugi problem, zrobiłem tak:

#include 

#include 

#include 


void rejestr()

{

std::cout << "Dodawanie do rejestru" << std::endl;

HKEY reg2;

LPCTSTR str="Software\\Classes\\VirtualStore\\MACHINE\\SOFTWARE\\KULKI" ;


if(RegOpenKeyEx(HKEY_CURRENT_USER,str,0,KEY_ALL_ACCESS,&reg2)==ERROR_SUCCESS)

{

DWORD wartosc=nLiczba1;

if(RegSetValueEx(reg2,"Nazwa",0,REG_DWORD,(LPBYTE)&wartosc,sizeof(DWORD))==ERROR_SUCCESS)

{

}

RegCloseKey(reg2) ;

std::cout << "Dodane" << std::endl;

}

}


int main()

{

std::cout << "Start" << std::endl;

std::cout << "Wpisz liczbe: " << std::endl;

int nLiczba1;

std::cin >> nLiczba1;

rejestr();

std::cout << "Koniec !" << std::endl;

_getch();

}

I teraz mam error tu "DWORD wartosc=nLiczba1;" co zrobić by zadziałało ?


(Fiołek) #6

nLiczba1 nie jest znana w funkcji rejestr. Przekaż ją do niej przez parametr.


(Premiertomas) #7

Działa z liczbami, ale z tekstem niechce działać:

#include 

#include 

#include 

#include 


std::string nazwa;


void rejestr()

{

std::cout << "Dodawanie do rejestru" << std::endl;

HKEY reg;

LPCTSTR str="Software\\Classes\\VirtualStore\\MACHINE\\SOFTWARE\\KULKI" ;


if(RegOpenKeyEx(HKEY_CURRENT_USER,str,0,KEY_ALL_ACCESS,®)==ERROR_SUCCESS)

{

LPCTSTR buffer=nazwa;

if(RegSetValueEx(reg,"Nazwa",0,REG_SZ,(LPBYTE)buffer,strlen(buffer))==ERROR_SUCCESS)

{

}

RegCloseKey(reg) ;

std::cout << "Dodane" << std::endl;

}

}


int main()

{

std::cout << "Start" << std::endl;

std::cout << "Wpisz nazwe:";

std::cin >> nazwa;

rejestr();

std::cout << "Koniec !" << std::endl;

_getch();

}

(Fiołek) #8

std::string != LPCSTR && (tym bardziej) std::string != LPCWSTR.

Użyj albo wstring, albo RegSetValueExA. Do tego, jeśli chcesz podać std::(w)string w miejsce c-stringa, metoda c_str.


(Premiertomas) #9

Nie rozumiem


(Fiołek) #10

std::string na LPCSTR, std::wstring, std::string, c_str().


(Premiertomas) #11

A czy nie mógłby ktoś porostu przekształcić kodu żeby zadziałał ?


(Fiołek) #12

Ale to za wiele nie da :wink:

LPCSTR buffer = nazwa.c_str();

RegSetValueExA(reg,"Nazwa",0,REG_SZ,(LPBYTE)buffer,strlen(buffer))

Lub:

//Wywalamy LPCTSTR

RegSetValueExA(reg, "Nazwa", 0, REG_SZ, (LPBYTE)nazwa.c_str(), nazwa.length())

(Premiertomas) #13

A teraz został ostatni problem:

#include 

#include 

#include 

#include 


std::string nazwa;

std::string nazwa2;

void rejestr(void);


void gracz1()

{

std::string nazwa2 = "N0";

std::cout << "W 'gracz1'" << std::endl;

std::cout << nazwa2 << std::endl;

std::cout << " " << std::endl;

rejestr();

}


void rejestr(void)

{

std::cout << "W 'rejestr'" << std::endl;

std::cout << nazwa2 << std::endl;

std::cout << "Dodawanie do rejestru" << std::endl;

HKEY reg;

LPCTSTR str="Software\\Classes\\VirtualStore\\MACHINE\\SOFTWARE\\KULKI" ;


if(RegOpenKeyEx(HKEY_CURRENT_USER,str,0,KEY_ALL_ACCESS,®)==ERROR_SUCCESS)

{

LPCSTR buffer = nazwa.c_str();

RegSetValueExA(reg,nazwa2,0,REG_SZ,(LPBYTE)buffer,strlen(buffer));

{

}

RegCloseKey(reg) ;

std::cout << "Dodane" << std::endl;

}

}


int main()

{

std::cout << "Start" << std::endl;

std::cout << "Wpisz nazwe:";

std::cin >> nazwa;

gracz1();

std::cout << "Koniec !" << std::endl;

_getch();

}

Chcę żeby w 'gracz1' do stałej 'nazwa2' dodawało się 'N0', a 'rejestr' korzystało z stałej 'nazwa2'.