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

Wykrycie wyłączenia komputera

Ostatnio zmodyfikowano 2014-03-01 15:33
Autor Wiadomość
AssSoft
Temat założony przez niniejszego użytkownika
Wykrycie wyłączenia komputera
» 2014-02-24 15:41:47
Sprawa ma się następująco: Kiedyś stworzyłem program zapisujący włączenia komputera, niedawno znalazłem jego kod i postanowiłem go usprawnić dodając możliwość zapisywania wyłączeń komputera.

No i tu się pojawia pytanie, na które odpowiedzi jak dotąd nie znalazłem - Jak wykryć rozpoczęcie wyłączania komputera? 
Prosiłbym o szybką i prostą odpowiedź.
P-105195
DejaVu
» 2014-02-24 15:50:21
Informacje o włączeniu i wyłączeniu komputera dostępne są w logach sytemowych, które można obejrzeć sobie aplikacją z panelu sterowania o nazwie "podgląd zdarzeń". Do tych logów można się dostać chyba poprzez WMI, więc nie trzeba 'monitorować' takich operacji za pomocą własnej aplikacji.
P-105197
xevuel
» 2014-02-24 17:11:33
Ale chyba i tak byłoby prościej odbierać komunikat WM_QUERYENDSESSSION.
P-105206
AssSoft
Temat założony przez niniejszego użytkownika
» 2014-02-24 22:15:03
@xevuel:
Czyli mogę zrobić coś takiego?:
C/C++
case WM_QUERYENDSESSION: {
    NOTIFYICONDATA nid;
    nid.cbSize = sizeof( NOTIFYICONDATA );
    nid.hWnd = hwnd;
    nid.uID = ID_TRAY1;
    nid.uFlags = 0;
    Shell_NotifyIcon( NIM_DELETE, & nid );
    string tekst = "wyłączenie, ";
    time( & czas );
    ata = ctime( & czas );
    tekst += data;
    plik.open( "C:/programs/LogicLog/log.txt", ios::out | ios::in | ios::app );
    plik << tekst;
    plik.close();
    PostQuitMessage( 0 );
    break;
Mówiąc "trochę go usprawnić" miałem na myśli też to że zmieniłem go z programu konsolowego na program GUI, stąd jakaś część kodu może dziwnie wyglądać. aczkolwiek zanim usunąłem przycisk zamknięcia właśnie tak wyglądała obsługa WM_DESTROY. Korzystałem z niej do testów.

@DejaVu:
Niby tak, ale nic nie daje takiej satysfakcji jak kliknięcie w ikonkę swojego programu i zobaczeniu listy włączeń i wyłączeń jak na dłoni.
P-105232
DejaVu
» 2014-02-24 22:25:09
Jak proces zostanie ubity to nie zobaczysz, że system został wyłączony. Jak uruchomisz tryb awaryjny to nie zauważysz, że komputer został włączony. WMI jest lepsze :)
P-105233
AssSoft
Temat założony przez niniejszego użytkownika
» 2014-03-01 15:33:37
Fakt, ale pozostaje jakiś czas ( nie mam zielonego pojęcia jaki ) od komunikatu WM_QUERYENDSESSION do ubicia procesu. Czas ten wystarczy na wykonanie powyższych instrukcji. WMI fakt faktem jest lepsze, ale dłużej trwa znalezienie poszukiwanej informacji.
Program działa, poprawnie zapisuje informacje.

Zamykam.
P-105446
« 1 »
  Strona 1 z 1