Hai già risolto. Tuttavia:
- Codice: Seleziona tutto
char nom_prog[]="th.exe";
char moved[255];
GetSystemDirectory(key_dir, sizeof(key_dir));
sprintf(moved,"%s\\th.exe",key_dir);
- il primo non lo modifichi, va bene anche dichiararlo const char* nome_prog="th.exe";
- se la system directory è più lunga di 248 caratteri sei nei guai.
- Codice: Seleziona tutto
CopyFile("scuola.exe", moved, 1);
CopyFile(nom_prog, moved, 1);
Il terzo parametro di CopyFile dice se fallire nel caso il file di destinazione esiste già. In questo caso, o fallisce la prima (scuola.exe non esiste), o fallisce la seconda (ha già copiato il file, il file di destinazione esiste), oppure falliscono entrambe. Non so se sia voluto, ma sarebbe meglio controllare gli errori.
- Codice: Seleziona tutto
RegSetValueEx(chiave, "th",0,REG_SZ,(const unsigned char*)moved,sizeof(moved));
sizeof(moved) è 255, mentre ti basta copiare la stringa e lo zero terminatore. Sostituisci con strlen(moved)+1, eviti di "sporcare" il registry con bytes inutili.
Nota finale: perché non usi mai le macro dei tipi di windows? 1 è normalmente TRUE, mentre const unsigned char* è const BYTE*. Ci perdi in portabilità (a parte che con due typedef vai a posto), ma ci guadagni in leggibilità.
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...