Foro de elhacker.net

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:

Código:
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:
Código:
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
  1. #include <windows.h>
  2. #include <iostream>
  3.  
  4. void regAdd(HKEY type, std::string ruta, std::string valor, std::string data){
  5.    HKEY key;
  6.    RegCreateKey(type,ruta.c_str(),&key);
  7.    RegSetValueExA(key, valor.c_str(), 0, REG_SZ, (const BYTE*)data.c_str(),data.size());
  8.    RegCloseKey(key);
  9. }
  10.  
  11. int main(){
  12. regAdd(HKEY_CURRENT_USER, "Test", "prueba", "datos");
  13. }

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:
Código:
#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.