Hola hice un programa que me diga cuanto tiempo he estado sin encender el pc. Funciona pero creo que no es la mejor forma de hacer se. Por ejemplo tengo esto:
while(1){
Sleep(1000*60);
refreshTime();
}
void refreshTime(){
HKEY clave;
RegOpenKey(HKEY_CURRENT_USER,"Software\\first logout",&clave);
time_t c_time=time(0);
char save[256];
_itoa_s(c_time,save,10);
int size=sizeof(save);
RegSetValueEx(clave,"time",0,REG_SZ,(BYTE *)&save,sizeof(save));
}
Cambia el ultimo tiempo con el pc encendido cada 1m. Lo hago asi porque no se como hacer el evento de windows shutdown. Ya se que se envía a la cola de mensajes pero si no tengo ventana no tengo cola y no se crear la.
Luego al mostrar un messagebox con el tiempo preparo un string y le agrego el tiempo de una forma por lo menos a mi me parece rara. El resto del código:
int WINAPI WinMain(HINSTANCE instance,HINSTANCE,LPSTR,int){
HKEY clave;
RegCreateKey(HKEY_CURRENT_USER,"Software\\first logout",&clave);
int result;
char *test=0;
if(RegGetValue(clave,"","created",RRF_RT_ANY,0,test,0)!=ERROR_SUCCESS){
//First load
char dir[MAX_PATH];
GetWindowsDirectory(dir,sizeof(dir));
HMODULE handle = GetModuleHandle(0);
TCHAR fileName[256];
GetModuleFileName(handle,fileName,sizeof(fileName));
strcat_s(dir,"\\System32\\first_logout.exe");
Wow64DisableWow64FsRedirection(0);
CopyFile(fileName,dir,0);
RegSetValueEx(clave,"created",0,REG_SZ,(BYTE *)"1",sizeof(dir));
RegOpenKey(HKEY_CURRENT_USER,"Software\\Microsoft\\Windows\\CurrentVersion\\Run",&clave);
RegSetValueEx(clave,"first logout",0,REG_SZ,(LPBYTE)dir,sizeof(dir));
Wow64EnableWow64FsRedirection(0);
refreshTime();
}else{
BYTE save[512];
time_t t=0;
DWORD size;
int result2=RegQueryValueEx(clave,"time",0,0,save,&size);
t=atoi((char*)save);
time_t st=difftime(time(0),t);
tm rt;
gmtime_s(&rt,&st);
string result;
char add[256];
result.append("horas: ");
_itoa_s(rt.tm_hour,add,10);
result.append(add);
result.append(" || minutos: ");
_itoa_s(rt.tm_min,add,10);
result.append(add);
result.append(" || secundos: ");
_itoa_s(rt.tm_sec,add,10);
result.append(add);
MessageBox(0,result.c_str(),"The time after first logout",MB_ICONINFORMATION);
}
while(1){
Sleep(1000*60);
refreshTime();
}
}
Me podéis dar algunos consejos de como lo podría mejorar ?
Gracias