Консольный таймер, который по истечении времени выключает компьютер - 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);
}