Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: Borito30 en 4 Febrero 2017, 14:47 PM

Título: RegSetValueEx me crea la regla en chino?
Publicado por: Borito30 en 4 Febrero 2017, 14:47 PM
Hola tengo una duda estuve haciendo unas modificaciones porque quería simplemente una regla usando qt y como compilador visual studio 2013.. normalmente estaba acostumbrado hacer esto:

string subclave="Hello";
string valor="Anyone";
LPCTSTR _subclave = TEXT("");
LPCTSTR _valor = TEXT("");
long crear = RegSetValueEx(key, _subclave, 0, REG_SZ, (LPBYTE) _valor, strlen(_valor) * sizeof(char));


Pero me daba los siguientes errores:

(https://i.stack.imgur.com/JDfOz.png)
Entonces hice los cambias que me pedia:
string hola="hola";
std::wstring stemp = std::wstring(hola.begin(), hola.end());
LPCWSTR subclave = stemp.c_str();
const char * valor = "hola";
long crear = RegSetValueEx(key, subclave, 0, REG_SZ, (LPBYTE) valor,     strlen(valor) * sizeof(char));


Pero me escribe la regla en chino y no se como solucionarlo

(https://i.stack.imgur.com/3nCV6.png)
Título: Re: RegSetValueEx me crea la regla en chino?
Publicado por: ivancea96 en 4 Febrero 2017, 14:54 PM
Perdona que responda así, pero me tengo que ir y no quería dejar esto:
https://github.com/ivancea/Varios/blob/master/C%2B%2B/reg.h (https://github.com/ivancea/Varios/blob/master/C%2B%2B/reg.h)

Échale u ojo a cómo lo llamo ahí. *Creo que funcionaba correctamente*. Luego cuando esté si no te funcionó así, lo pruebo.

EDITO: Ya lo probé, y bien. Ese RegSetValueEx, en mi caso, llama a RegSetValueAxA (la versión ANSI). También podrías llamar explícitamente a RegSetValueKeyExW usando wstring.

Código (cpp) [Seleccionar]
#include <windows.h>
#include <iostream>

void regAdd(HKEY type, std::string ruta, std::string valor, std::string data){
    HKEY key;
    RegCreateKey(type,ruta.c_str(),&key);
    RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());
    RegCloseKey(key);
}

int main(){
regAdd(HKEY_CURRENT_USER, "Test", "prueba", "datos");
}


Y con respecto al error que tienes tú:
En el primer código que pusiste, no puedes llamar a strlen con de TCHAR*. Yo de ti prescindiría de los LPCTSTR y pasaría directamente los valores de las string. Y bueno, en vez de strlen, valor.size().
Título: Re: RegSetValueEx me crea la regla en chino?
Publicado por: Borito30 en 4 Febrero 2017, 15:51 PM
Tienes razon lo crea perfectamente hice lo siguiente como me dijistes y funciona correctamente:
#include <windows.h>
#include <iostream>
string valor = "prueba";
string data = "prueba";
long crear = RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());

Gracias.