[C] Programma di utility per gestione tempo al pc

di il
3 risposte

[C] Programma di utility per gestione tempo al pc

Come prima cosa mi scuso per il titolo assurdo, ma non sapevo come descrivere brevemente questo programmino...

A cosa serve?

In poche parole questo programmino serve per tener conto di quanto tempo è rimasto accesso il vostro pc.
Personalmente lo utilizzo per controllare quanto tempo spendo davanti allo schermo ogni settimana.

Come funziona?

Semplice! Prende il tempo da quando è stato avviato il sistema e lo salva in un documento di testo che potrete consultare quando volete.
Ovviamente dovrete apreire il file manualmente (oppure metterlo nella lista dei file all'avvio) e anche salvare il tempo

Aiuto!
Il programma che avevo in mente sarebbe stato a grandi linee questo, (ma a causa delle mie scarse conoscenze informatiche non ho potuto realizzarlo):
Registrare autaomaticamente il tempo.(cioè senza fare "salva il tempo" oppure "salva il tempo e spegni il pc").
Io avrei avuto in mente di fare cosi: aggiornare il file che tiene conto del tempo (log.txt) ogni tot di minuti (ad esempio 5) e quindi sovrascrivere il tempo precedente con quello aggiornato.


Siete tutti invitati a modificare e soprattutto migliorare questo programmino e poi caricare in questo thread il codice modificato. PS: le critiche sono ben accette

Bando alle ciance, ecco il codice: Il codice
#include <iostream>
#include <fstream> //header necessario per ofstream!
#include <ctime>
#include <Windows.h>
using namespace std;

int main() 
{
  	unsigned long long ms=0;
  	float exp=0.0000167,ris=0;  //exp è il fattore per convertire da millisecondi a minuti. In forma scientifica sarebbe 1,67×10^(-5)
	time_t ct;
	ct = time(NULL);
	int menu,dec;
	
	ofstream f("log.txt", ios::app); //apre il file in modalità append, lasciando intatto quello che c'è e scrivendo alla fine
    if(!f) 
	{
        		cout<<"Errore nell'apertura del file!";
        		return -1;
    }
		
	f << "--------NUOVO AVVIO--------"<<endl<< ctime(&ct); 
    f.close(); //chiudo il file	
  	do
	{   
		system("cls");
		cout<<endl;	
		cout<<"Premi 1 per salvare il tempo e spegere il pc"<<endl<<"Premi 2 per visulizzare il tempo"<<endl<<"Premi 3 per salvare solamente il tempo"<<endl<<"Premi 4 per uscire senza fare niente"<<endl;
		cout<<"La tua scelta: ";
		cin>>menu;
		switch (menu)
		{
			case 1:
					{
						ms=GetTickCount();  //restituisce il risultato in millisecondi
 						ris=ms*exp; 
						ofstream g("log.txt", ios::app); //apre il file in modalità append, lasciando intatto quello che c'è e scrivendo alla fine
    					if(!g) 
						{
        					cout<<"Errore nell'apertura del file!";
        					return -1;
    					}
    		
      					g << "Hai spento il pc " << ris << " minuti dall'avvio." << endl; //l'endl indica che ogni cosa viene scritta a capo, se fosse omesso scriverebbe tutto su una linea
						g.close(); //chiudo il file
    					cout<<"Scrittura avvenuta con successo!"<<endl;
    					system("shutdown -s -t 59");
    					cout<<"Il sistema verrà arrestato tra 50 secondi,"<<endl<<" puoi interrompere l'arresto inserndo il comando shutdown -a nel cmd";
    					system("pause");
		    		}
    		break;
    		case 2:
					{
						system("cls");
						ms=GetTickCount();  //restituisce il risultato in millisecondi
  						ris=ms*exp; 
						cout<<endl<<"Il pc e' accesso da "<<ris<<" minuti"<<endl;
						system("pause");
					}
			break;
			
			case 3: 
			{
				
					ms=GetTickCount();  //restituisce il risultato in millisecondi
 					ris=ms*exp; 
  					//cout<<"Il sistema e' stato avviato da "<<ris<< " minuti"<<endl;
  			
		    		ofstream h("log.txt", ios::app); //apre il file in modalità append, lasciando intatto quello che c'è e scrivendo alla fine
    				if(!h) 
					{
        				cout<<"Errore nell'apertura del file!";
        				return -1;
    				}
    		
      				h << "Hai salvato il tempo " << ris << " minuti dall'avvio." << endl; //l'endl indica che ogni cosa viene scritta a capo, se fosse omesso scriverebbe tutto su una linea

    				h.close(); //chiudo il file
    				cout<<"Il tempo e' stato salvato con successo";
    				system("pause");
			}
			break;
			case 4: {return 0;}
			break;
			default : cout << "Errore!";
		}
		dec=0;
	}while(dec==0);
		

    return 0;
}

3 Risposte

  • Re: [C] Programma di utility per gestione tempo al pc

    Non usare system, usa ExitWindowsEx visto che stai usando GetTickCount. Attenzione perche devi aggiustare i privilegi per usare la funzione.
    Esempio:
    
    
    typedef enum
    {
    	POWERMODE_HIBERNATE,
    	POWERMODE_SUSPEND,
    	POWERMODE_REBOOT,
    	POWERMODE_POWER_OFF
    }FESDK_POWERMODE_ENUM;
    
    ...........
    
    HMODULE m_handle  = ::LoadLibrary(_T("Powrprof.dll"));
    	
    	if (m_handle) 
    		pSetSuspendState = (tSetSuspendState) ::GetProcAddress(m_handle,"SetSuspendState"); 
    
    bool CPowerManager::SetPowerMode( const FESDK_POWERMODE_ENUM & powerMode )
    {
    	HANDLE hToken = NULL; 
    	TOKEN_PRIVILEGES tkp = {0}; 
    
    	if (!::OpenProcessToken(::GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) 
    		return false; 
    
    	::LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid); 
    
    	tkp.PrivilegeCount = 1;  
    	tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; 
    
    	::AdjustTokenPrivileges(hToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0); 
    	::CloseHandle(hToken);
    	if (::GetLastError() != ERROR_SUCCESS) 
    		return false; 
    	switch(powerMode)
    	{
    	case POWERMODE_HIBERNATE:
    		{
    			if(pSetSuspendState)
    			{
    				return pSetSuspendState(TRUE,FALSE,FALSE) != 0;
    			}
    		}
    		break;
    	case POWERMODE_SUSPEND:
    		{
    			if(pSetSuspendState)
    			{
    				return pSetSuspendState(FALSE,FALSE,FALSE) != 0;
    			}
    		}
    		break;
    	case POWERMODE_REBOOT:
    		{
    			return ::ExitWindowsEx(EWX_REBOOT, SHTDN_REASON_MAJOR_APPLICATION) != 0;
    		}
    		break;
    	default: 
    		{
    			return ::ExitWindowsEx(EWX_POWEROFF, SHTDN_REASON_MAJOR_APPLICATION) != 0;
    		}
    		break;
    	}
    	return false;
    }
    
  • Re: [C] Programma di utility per gestione tempo al pc

    Che problema potrebbe creare? Compatibilità?
  • Re: [C] Programma di utility per gestione tempo al pc

    No lentezza. Stai chiamando un programma esterno con system quando ne esiste un API per fare la stessa cosa.
Devi accedere o registrarti per scrivere nel forum
3 risposte