Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wylogowanie z systemu [C++]

Ostatnio zmodyfikowano 2009-06-13 23:24
Autor Wiadomość
malan
Temat założony przez niniejszego użytkownika
Wylogowanie z systemu [C++]
» 2009-06-11 23:07:03
Problem nie dotyczy getenv. Po krótce: zrób klasę i w niej destruktor. W destruktorze pobieraj czas i zapisuj go do pliku z logiem.

Naukę klas zostawiłem sobie na wakacje, więc nie za bardzo rozumiem po co tworzyć ten destruktor... Wiem, że on zwalania chyba pamięć/ usuwa obiekty..., ale co on ma do zapisania czasu w jakim user się wylogował to nie wiem... ;/
P-7622
WunM
» 2009-06-11 23:20:17
Śłuży m.in. do usuwania zbędnych danych w pamięci. Ale fakt że jest wywoływany przy usuwaniu obiektu (na samym końcu) można wykorzystać m.in. do zapisania czegoś w pliku.
P-7623
DejaVu
» 2009-06-12 12:16:45
C/C++
#include <conio.h>
#include <iostream>
using namespace std;

class Klasa
{
public:
    ~Klasa()
    {
        cout << "sprzatam" << endl;
    }
}; //class Klasa
int main()
{
    {
        Klasa zmienna;
        cout << "napis" << endl;
    }
    getch();
    return 0;
}
Zwróć uwagę na to, że nie ma nigdzie wywołania destruktora, ale on się wykona gdy zmienna będzie szła do piachu (będzie zwalniana z pamięci).
P-7627
malan
Temat założony przez niniejszego użytkownika
» 2009-06-12 13:36:09
Stworzyłem coś takiego:
C/C++
#include <iostream>
#include <string>
#include <fstream>

#include <stdlib.h>
#include <time.h>

#include <conio.h>
using namespace std;
class LogTime
{
private:
    string Konwertuj( string Dane, string Wybor );
public:
    ~LogTime();
};
LogTime::~LogTime()
{
    time_t rawtime;
    struct tm * timeinfo;
    time( & rawtime );
    timeinfo = localtime( & rawtime );
   
    ofstream Plik;
    string Pobierz = asctime( timeinfo ), Data, Czas, UserName;
   
    for( int i = 0; i < 24; i++ )
    {
        Czas += Pobierz[ i ];
        if( i == 3 )
        {
            for( i = 11; i < 20; i++ ) Czas += Pobierz[ i ];
           
            for( i = 8; i < 11; i++ )
            {
                Data += Pobierz[ i ];
                if( i == 10 )
                for( i = 4; i < 8; i++ )
                {
                    Data += Pobierz[ i ];
                    if( i == 7 ) for( i = 20; i < 24; i++ ) Data += Pobierz[ i ];
                   
                }
               
            } // for(i=8;i<11;i++)  
           
        } // if(i==3)
       
    } // for(int i=0;i<24;i++) 
   
    Czas = "inLog time: " + Konwertuj( Czas, "Czas" ) + "\n===========================\n";
    Data = Konwertuj( Data, "Data" );
    UserName = getenv( "USERNAME" );
    if( UserName.length() == 0 ) UserName = "DefaultUser";
   
    Plik.open(( "logs/" + Data + " (" + UserName + ")" + ".txt" ).c_str(), ios::out | ios::app );
    if( Plik.fail() )
         ofstream Plik(( "logs/" + Data + "(" + UserName + ")" + ".txt" ).c_str(), ios::out | ios::app );
   
    Plik.write( & Czas[ 0 ], Czas.length() );
    Plik.close();
}
string LogTime::Konwertuj( string Dane, string Wybor )
{
    string nDane, dDane;
    int Suma = 0;
   
    //Konwerter czasu
    if( Wybor == "Czas" )
    {
        for( int i = 0; i < 3; i++ ) Suma += Dane[ i ];
       
        switch( Suma )
        {
        case 298: nDane = "Poniedziałek"; break;
        case 302: nDane = "Wtorek"; break;
        case 288: nDane = "Środa"; break;
        case 305: nDane = "Czwartek"; break;
        case 289: nDane = "Piątek"; break;
        case 296: nDane = "Sobota"; break;
        case 310: nDane = "Niedziala"; break;
        default: nDane = "Error!"; break;
        }
       
        for( int i = 3; i < Dane.length(); i++ ) nDane += Dane[ i ];
       
        return nDane;
    }
   
    // Konwerter daty
    if( Wybor == "Data" )
    {
        for( int i = 3; i < 6; i++ ) Suma += Dane[ i ];
       
        switch( Suma )
        {
        case 281: nDane = "Styczeń"; break;
        case 269: nDane = "Luty"; break;
        case 288: nDane = "Marzec"; break;
        case 291: nDane = "Kwiecień"; break;
        case 295: nDane = "Maj"; break;
        case 301: nDane = "Czerwiec"; break;
        case 299: nDane = "Lipiec"; break;
        case 285: nDane = "Sierpień"; break;
        case 296: nDane = "Wrzesień"; break;
        case 294: nDane = "Październik"; break;
        case 307: nDane = "Listopad"; break;
        case 268: nDane = "Grudzień"; break;
        default: nDane = "Error!"; break;
        }
       
        for( int i = 0; i < Dane.length(); i++ )
        {
            if( i == 3 )
            {
                dDane += nDane;
                i += 3;
            }
            dDane += Dane[ i ];
        }
        return dDane;
    }
}
int main()
{
    {
        LogTime test;
        cout << "To_jest_test;";
    }
    getch();
    return 0;
}

Jeśli dobrze to wszystko zrozumiałem to...: pobieram czas, w którym został uruchomiony program i zapisuje go do pliku..., potem moment kiedy destruktor się uaktywni i zapisze czas do pliku do będzie moment wyłączenia programu..., czyli wylogowania? Tylko wtedy program by musiał być cały czas aktywny, więc konsola odpada, bo nie da się jej zminimalizować tak jak np. 'WatchDDT'...
P-7630
DejaVu
» 2009-06-12 13:45:56
Hm... czyli Ty chcesz zrobić program, który loguje czas z każdym jego uruchomieniem? W takim wypadku musisz mieć mechanizm Windowsa, który zapewni Ci uruchamianie Twojej aplikacji w momencie zamykania systemu. Może harmonogram to umożliwia (choć do akcji zamykania systemu to nie jestem już taki pewien).
P-7631
malan
Temat założony przez niniejszego użytkownika
» 2009-06-12 14:07:02
No można tak powiedzieć. Na razie jest tak, że program tworzy plik 'txt' z aktualną datą, i nazwą użytkownika (w nazwie) i zapisuje dzień i godzinę uruchomienia aplikacji, czyli zalogowania się na jakieś konto w windows. To było proste, bo wystarczy wstawić skrót do progr. w autostarcie..., a teraz chciałbym jeszcze żeby wstawiał czas wylogowania się i tu mam problem, ale poszukam czegoś...
P-7633
DejaVu
» 2009-06-12 14:48:38
moim zdaiem aplikacja powinna wtedy działać w tle od momentu uruchomienia do momentu zakończenia. Byłby to de'facto czas uruchomienia aplikacji, jednak jeśli będzie skrót w autostarcie i będzie to aplikacja windowsowa (brak konsoli), brak okna i brak ikony to obecność aplikacji nie zostanie zauważona (jeśli proca nie zajeździ) i jeśli ktoś jej z menedżera nie ubije.
P-7634
malan
Temat założony przez niniejszego użytkownika
» 2009-06-12 15:01:27
Tak by musiało być... Heh myślałem, że to będzie program na 15 minut, a tu tyle roboty... (w sumie gdyby nie to wylogowywanie to by tak było) Sprawdzałem harmonogram i tam nie da się chyba zaplanować zadania podczas wyłączania systemu... Szukam dalej...
P-7635
« 1 » 2
  Strona 1 z 2 Następna strona