Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Kaxperday en 13 Septiembre 2014, 13:34 pm



Título: Anclar programa al registro
Publicado por: Kaxperday en 13 Septiembre 2014, 13:34 pm
Hola compas, para anclar al registro uso esto:

Código:
char ad[]="REG ADD HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v IniciarProgramas /t REG_SZ /d \"C:\\Users\\%username%\\directorio\\programa.exe\"";
system(ad);

El problema es que al ejecutar el programa no lo ancla (pues reinicio y no lo ejecuta), sin embargo si lo escribo en la consola si se ancla correctamente, me gustaría saber si tienen una manera más eficaz para anclar un programa al registro en C, además está que uso no funciona si el programa cambia de directorio.

Saludos.


Título: Re: Anclar programa al registro
Publicado por: ivancea96 en 13 Septiembre 2014, 15:22 pm
Nunca lo hice por consola, pero si te parece bien, también puedes usar la API de Windows:
RegCreateKey y RegSetValue, RegDeleteValue, RegQueryValue, RegOpenKey, RegCloseKey. (Esa son las principales)


Título: Re: Anclar programa al registro
Publicado por: Kaxperday en 13 Septiembre 2014, 17:29 pm
Es que tengo entendido que se puede hacer por la consola, usando variables HKEY y demás estaría bien encontrar la manera de hacerlo para C. Si alguien sabe algo al respecto que lo diga, la idea es anclar el .exe al con el código automáticamente.

Ya dije que me funcionaba si lo ponia en la CMD pero usando system no iba, me pondré a buscarlo pues.


Título: Re: Anclar programa al registro
Publicado por: ivancea96 en 13 Septiembre 2014, 22:09 pm
estaría bien encontrar la manera de hacerlo para C

La winapi se puede usar en C eh?


Título: Re: Anclar programa al registro
Publicado por: Kaxperday en 14 Septiembre 2014, 00:39 am
Con la winapi se podrá hacer también pero tampoco sé, creo que atajo más si lo hago directamente con una orden con system.

Aqui: http://social.msdn.microsoft.com/Forums/en-US/5b318f44-281e-4098-8dee-3ba8435fa391/add-registry-key-for-autostart-of-app-in-ice?forum=quebectools (http://social.msdn.microsoft.com/Forums/en-US/5b318f44-281e-4098-8dee-3ba8435fa391/add-registry-key-for-autostart-of-app-in-ice?forum=quebectools)

He encontrado un código parecido al mío, pero no igual tendría que hacer algo así según esto:

Código:
system("reg.exe add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run" /v "App1" /t REG_SZ /d "C:\app\app.exe" /f");

El problema es que esto no trabaja, al igual que no lo hace system("cmd.exe netstat"), o system("start cmd.exe netstat");

De todas formas haber si encuentro el código y lo paso.


Título: Re: Anclar programa al registro
Publicado por: patilanz en 14 Septiembre 2014, 15:33 pm
Yo lo hago con la winAPI
Código
  1. HKEY clave;
  2. RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&clave);
  3. RegSetValueEx(clave,"first logout",0,REG_SZ,(LPBYTE)dir,sizeof(dir));

dir seria C:\app\app.exe


Título: Re: Anclar programa al registro
Publicado por: Kaxperday en 14 Septiembre 2014, 23:29 pm
¿Quieres decir que con esto bastaría?

Citar
HKEY clave;
char *dir="C:\directoriodelaapp\app.exe";
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&clave);
RegSetValueEx(clave,"first logout",0,REG_SZ,(LPBYTE)dir,sizeof(dir));

Ya lo probaré haber si se ancla correctamente y no da problemas.

Saludos y gracias.


Título: Re: Anclar programa al registro
Publicado por: Drewermerc en 15 Septiembre 2014, 04:32 am
Hola Kaxperday.
Bueno si lo que quieres es crear una clave de registro para cuando windows inicie yo uso esta forma.
Código
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. int main()
  5. {
  6. char *path = "C:\\Users\\pruebas\\Escritorio\\programa.exe";
  7. int regKey, regOpen;
  8. HKEY hkey;
  9.  
  10. regOpen = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
  11. if (regOpen == 1)
  12. printf("La clave ya esta creada\n");
  13. else
  14. {
  15. regKey = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
  16. if(regKey == 0)
  17. {
  18. RegSetValueEx((HKEY)hkey, "progInicio", 0, REG_SZ, (BYTE*)path, strlen(path));
  19. printf("Se creo la clave en el registro con exito\n");
  20. }
  21. else
  22. printf("No se pudo crear la clave en el registro\n");
  23. }
  24. while(TRUE)
  25. printf("hola\n");
  26.  
  27. return 0;
  28.  
  29. }
  30.  

Y bueno para que funciones si usas algún IDE como devcpp o codeblock si lo ejecutas desde hay no funcionara tiene que hacerlo tu ejecutando lo como administrado.
Bueno espero que te sirva.
Saludos.
Drewermerc.