Консольный таймер, который по истечении времени выключает компьютер - C (СИ)

Узнай цену своей работы

Формулировка задачи:

нужно сделать консольный таймер который по истечению некоторого времени (1 минута) выключает компьютер ОС WinXP так же чтобы был вывод прошедшего времени на экран все что получилось сделать у меня
#define STRICT 1
 #include <windows.h>
 #include <iostream.h>
 
 //setlocale( LC_ALL, "Russian" );
 
 VOID CALLBACK TimerProc(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
 cout << "System  Time: " << dwTime << '\n';
 cout.flush();
 }
 
 int main(int argc, char *argv[], char *envp[]) {
    int Counter=0;
    MSG Msg;
 UINT TimerId = SetTimer(NULL, 0, 500, &TimerProc);
 cout << "TimerId: " << TimerId << '\n';
 if (!TimerId)
    return 16;
 while (GetMessage(&Msg, NULL, 0, 0)) {
    ++Counter;
    if (Msg.message == WM_TIMER)
        cout << "Time: " << Counter << "; timer message\n";
    else
        cout << "System Time: " << Counter << "; message: " << Msg.message << '\n';
    DispatchMessage(&Msg);
    }
 KillTimer(NULL, TimerId);
 return 0;
 }
тупо не могу понять как оно должно быть устроено =( помогите пожалуйста люди добрые

Решение задачи: «Консольный таймер, который по истечении времени выключает компьютер»

textual
Листинг программы
#include <windows.h>
#define ID_SECOND 1
#define ID_MINUTE 60
 
LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow)
{
    
    WNDCLASSEX wndclass;
    HWND hwnd;
    MSG msg;
    char* szAppName= "Timer";
 
    ZeroMemory(&wndclass, sizeof(wndclass));
    wndclass.cbSize=sizeof(wndclass);
    wndclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);
    wndclass.hCursor=LoadCursor(NULL, IDC_ARROW);
    wndclass.hInstance=hInstance;
    wndclass.style=CS_HREDRAW|CS_VREDRAW;
    wndclass.lpfnWndProc=WndProc;
    wndclass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);
    wndclass.lpszClassName=szAppName;
    RegisterClassEx(&wndclass);
 
    hwnd=CreateWindow(szAppName, "60 sec timer",WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        CW_USEDEFAULT, CW_USEDEFAULT,
        NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
 
    SetTimer(hwnd, ID_SECOND,1000,NULL);
 
    while(GetMessage(&msg,NULL, 0,0))
        DispatchMessage(&msg);
 
    return 0;
}
 
LPARAM CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    static int x;
    char cBuffer[4];
    HDC hdc;
    PAINTSTRUCT ps;
    RECT rc;
 
    switch(msg)
    {
    case WM_CREATE:
        x=ID_MINUTE;
        return 0;
 
    case WM_PAINT:
        hdc=BeginPaint(hwnd,&ps);
 
        GetClientRect(hwnd, &rc);
        wsprintf(cBuffer,"%d",x);
        DrawText(hdc,cBuffer,strlen(cBuffer),&rc,DT_CENTER|DT_VCENTER);
 
        EndPaint(hwnd, &ps);
        return 0;
 
    case WM_TIMER:
        x--;
        if(!x)
        {
                ExitWindowsEx(EWX_LOGOFF,EWX_FORCE);//LOGOFF уложит спать, SHUTDOWN - выключит
                DestroyWindow(hwnd);
        }
        InvalidateRect(hwnd, NULL, TRUE);
        return 0;
 
    case WM_DESTROY:
        KillTimer(hwnd, ID_SECOND);
        PostQuitMessage(0);
        return 0;
    }
    return DefWindowProc(hwnd, msg, wParam, lParam);
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 3.933 из 5
Похожие ответы