tomasss
(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
(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)
tomasss
(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,®2)==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 ?
Fiolek
(Fiołek)
#6
nLiczba1 nie jest znana w funkcji rejestr. Przekaż ją do niej przez parametr.
tomasss
(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();
}
Fiolek
(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.
Fiolek
(Fiołek)
#10
tomasss
(Premiertomas)
#11
A czy nie mógłby ktoś porostu przekształcić kodu żeby zadziałał ?
Fiolek
(Fiołek)
#12
Ale to za wiele nie da
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())
tomasss
(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’.