Anclar programa al registro

Iniciado por Kaxperday, 13 Septiembre 2014, 13:34 PM

0 Miembros y 3 Visitantes están viendo este tema.

Kaxperday

Hola compas, para anclar al registro uso esto:


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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

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)

Kaxperday

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

ivancea96

Cita de: Kaxperday en 13 Septiembre 2014, 17:29 PM
estaría bien encontrar la manera de hacerlo para C

La winapi se puede usar en C eh?

Kaxperday

#4
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

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

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

patilanz

Yo lo hago con la winAPI
Código (cpp) [Seleccionar]
HKEY clave;
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&clave);
RegSetValueEx(clave,"first logout",0,REG_SZ,(LPBYTE)dir,sizeof(dir));


dir seria C:\app\app.exe

Kaxperday

¿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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.

Drewermerc

Hola Kaxperday.
Bueno si lo que quieres es crear una clave de registro para cuando windows inicie yo uso esta forma.

#include <stdio.h>
#include <windows.h>

int main()
{
char *path = "C:\\Users\\pruebas\\Escritorio\\programa.exe";
int regKey, regOpen;
HKEY hkey;

regOpen = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
if (regOpen == 1)
printf("La clave ya esta creada\n");
else
{
regKey = RegCreateKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", &hkey);
if(regKey == 0)
{
RegSetValueEx((HKEY)hkey, "progInicio", 0, REG_SZ, (BYTE*)path, strlen(path));
printf("Se creo la clave en el registro con exito\n");
}
else
printf("No se pudo crear la clave en el registro\n");
}
while(TRUE)
printf("hola\n");

return 0;

}


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.