wykrywanie wyłączenia komputera

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
A więc chodzi mi o to aby mój program w momencie kiedy ktoś wyłącza komputer mógł wykonać jakieś operacje - ma zapisać godzinę kiedy wyłączany jest komputer. Program działa już w tym momencie, uruchamia się wraz ze startem systemu (choć lepiej by było, żeby dopiero wtedy się uruchomił i zapisał godzinę) Czy wie ktoś jak mam to zrobić
<
? Za pomoc z góry dziękuję
<
 

sevjij

Użytkownik
Dołączył
Luty 11, 2007
Posty
28
Ciebie interesuje tylko i wyłącznie CALLBACK od okna w winapi.
Poczytaj o : WM_QUERYENDSESSION, WM_ENDSESSION na msdn'ie.
Na wiadomość o końcu sesji będziesz mógł zaprogramować co program ma zrobić.
 

jurgensen

Użytkownik
Dołączył
Grudzień 14, 2006
Posty
678
Ewentualnie, jeśli nie chcesz korzystać z WinAPI, możesz w programie dodać funkcję, która co np. minutę zapisuje godzinę do jakiegoś pliku. Jeśli program zakończy działanie, to oczywiście nie zapisze. Następnie przy starcie programu może sprawdzać ostatnią zapisaną datę i godzinę
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
<div class='quotetop'>CYTAT(sevjij @ 22.06.2008, 14:44) <{POST_SNAPBACK}></div>
Ciebie interesuje tylko i wyłącznie CALLBACK od okna w winapi.
Poczytaj o : WM_QUERYENDSESSION, WM_ENDSESSION na msdn'ie.
Na wiadomość o końcu sesji będziesz mógł zaprogramować co program ma zrobić.[/b]
Poczytałem trochę (jestem dopiero początkujący i nauka tego idze mi bardzo opornie) komunikat ten jest wysyłany do mojego programu tylko jak ja mam się o tym dowiedzieć ? To znaczy, że ExitWindowsEx wysyła mi go ale nie wiem jak go zaprogramować żeby on w tym momencie wykonał dalsze instrukcje
 

sevjij

Użytkownik
Dołączył
Luty 11, 2007
Posty
28
<div class='quotetop'>CYTAT(Whitlock @ 22.06.2008, 22:01) <{POST_SNAPBACK}></div>
Poczytałem trochę (jestem dopiero początkujący i nauka tego idze mi bardzo opornie) komunikat ten jest wysyłany do mojego programu tylko jak ja mam się o tym dowiedzieć ? To znaczy, że ExitWindowsEx wysyła mi go ale nie wiem jak go zaprogramować żeby on w tym momencie wykonał dalsze instrukcje[/b]

To się opiera na standartowym programie w winapi, tylko, że bez wywołania głównego okna.

Kod:
/*  Deklarujesz Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "okienko";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    if (!RegisterClassEx (&wincl))
        return 0;

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        /* Wyslij wiadomosc do WindowProcedure */
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                 
    {
    case WM_QUERYENDSESSION:
    {
    break;
    }
    case WM_DESTROY:
        PostQuitMessage (0);       
        break;
    default:                     
        return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
I po prostu w przypadku WM_QUERYENDSESSION rozpisujesz co ma program zrobić.
Tak w ogóle, to jest wycięte z gotowca którego na pewno masz w swoim IDE.

Nie sprawdzałem, czy funkcja się kompiluje - jak nie to wejdź w swoje IDE, wybierz win32 application i wytnij nie potrzebne Ci kawałki - ten od powstania głównego okna i od WM_CREATE i WM_COMMAND.

Pozdrawiam.
 

whitlock

Użytkownik
Dołączył
Czerwiec 20, 2008
Posty
25
<div class='quotetop'>CYTAT(sevjij @ 23.06.2008, 17:52) <{POST_SNAPBACK}></div>
To się opiera na standartowym programie w winapi, tylko, że bez wywołania głównego okna.

Kod:
/*  Deklarujesz Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

char szClassName[ ] = "okienko";

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */

    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    if (!RegisterClassEx (&wincl))
        return 0;

    while (GetMessage (&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        /* Wyslij wiadomosc do WindowProcedure */
        DispatchMessage(&messages);
    }
    return messages.wParam;
}
LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)                 
    {
    case WM_QUERYENDSESSION:
    {
    break;
    }
    case WM_DESTROY:
        PostQuitMessage (0);       
        break;
    default:                     
        return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
I po prostu w przypadku WM_QUERYENDSESSION rozpisujesz co ma program zrobić.
Tak w ogóle, to jest wycięte z gotowca którego na pewno masz w swoim IDE.

Nie sprawdzałem, czy funkcja się kompiluje - jak nie to wejdź w swoje IDE, wybierz win32 application i wytnij nie potrzebne Ci kawałki - ten od powstania głównego okna i od WM_CREATE i WM_COMMAND.

Pozdrawiam.[/b]
ooo bardzo dziękuje. Wiesz może co zrobić aby ten program działał jako zasobnik systemowy, bo on będzie uruchamiał się wraz ze startem systemu ?
 
Do góry Bottom