Tra gli ultimi articoli

Aggiungere chiave al registro di sistema

c++** Attenzione questo post vale solo per sviluppo su macchine che utilizzano come sistema operativo Windows **

Ci troviamo nella situazione di voler far lanciare un software .exe ad ogni avvio del sistema operativo. Possiamo fare questo direttamente dal nostro file .exe di installazione o di sviluppo. Notiamo bene nel codice che andremo a lavorare solamente sulla parte del registro dedicata all’utente corrente e non a tutti gli utenti della macchina. Questo perchè? Perchè per aggiungere la chiave su tutti gli utenti ci servirebbe un permesso e questo implicherebbe un’autentificazione aggiuntiva.

Con questo codice aggiungiamo il file .exe da cui stiamo lanciando il programma direttamente in esecuzione automatica.
(Dove c’è ‘Nome Chiave’ potete specificare il nome della chiave che vorrete sia visualizzata nel registro di sistema.

 
Questo è il codice per inserire automaticamente l’exe da cui è lanciato nel registro di configurazione di windows.
 

#include 
#include 
#include 

int main(void)
{
    TCHAR szPath[MAX_PATH];
    DWORD pathLen = 0;


    pathLen = GetModuleFileName(NULL, szPath, MAX_PATH);
    if (pathLen == 0)
    {
	_tprintf(TEXT("Non trovo il nome e percorso del file.. = %lu\n"), GetLastError());
	return -1;
    }

    HKEY newValue;

    if (RegOpenKey(HKEY_CURRENT_USER,
	TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
	&newValue) != ERROR_SUCCESS)
    {
	_tprintf(TEXT("Non riesco ad aprire il registro.. errore = %lu\n"), GetLastError());
	return -1;
    }
 
  
    DWORD pathLenInBytes = pathLen * sizeof(*szPath);
    if (RegSetValueEx(newValue,
	TEXT("Nome_Chiave"),
	0,
	REG_SZ,
	(LPBYTE)szPath,
	pathLenInBytes) != ERROR_SUCCESS)
    {
	RegCloseKey(newValue);
	_tprintf(TEXT("Non riesco ad aggiungere la chiave. Errore = %lu\n"), GetLastError());
	return -1;
    }

    RegCloseKey(newValue);

    return 0;
}

Questo codice personalizza invece la chiave che vogliamo aggiungere, in questo caso saremo noi ad inserire il percorso dell’eseguibile da lanciare all’avvio. E’ il codice precedente editato ed un pò ‘sporco’ ma funziona.

 #include <iostream>
#include <windows.h>
#include <winreg.h>
#include <Tchar.h>

using namespace std;

 

int main()
{
   TCHAR szPath[MAX_PATH];
DWORD pathLen = 0;

_tcscpy(szPath, _T("C:\\Mio_Programma_Itabit.exe"));
pathLen = _tcslen(szPath);


HKEY newValue;
if (RegOpenKey(HKEY_CURRENT_USER,
    TEXT("Software\\Microsoft\\Windows\\CurrentVersion\\Run"),
    &newValue) != ERROR_SUCCESS)
{
    return -1;
}
DWORD pathLenInBytes = pathLen * sizeof(*szPath);
if (RegSetValueEx(newValue,
    TEXT("Mio_Programma"),
    0,
    REG_SZ,
    (LPBYTE)szPath,
    pathLenInBytes) != ERROR_SUCCESS)
{
    RegCloseKey(newValue);
    return -1;
}
RegCloseKey(newValue);
return TRUE;
}


About Stefano Berardi

Stefano Berardi
''non sono superman... I'm not superman..."