定时开关机
头文件windows.h
BOOL ExitWindowsEx(
UINT uFlags,
DWORD dwReason
};
uFlags的值:
EWX_LOGOFF,0,注销
EWX_SHUTDOWN,1,关机
EWX——REBOOT,2,重启
EWX_POWEROFF,8,断开电源
EWX_FORCE,4,强制终止所有程序
EWX_FORCEIFHUNG,16,强制终止未响应的程序
后面的dwReason一般不指定
返回值为0时表示失败,非0时就表示已经开始执行关机操作
要指定时间关机 只需一个SetTimer函数即可
函数原型为
UINT_PTR WINAPI SetTimer(HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc);
其中,hwnd为窗口句柄,nIDEvent为定时器ID,uElapse微秒值,表示每隔多少微秒调用函数,lpTimerFunc回调函数
lpTimerFunc回调函数原型:
void CALLBACK lpTimerFunc(HWND hwnd, UIINT message, UINT iTimerID, DWORD dwTimer);
示例程序:
void CALLBACK MyTimerProc(HWND hwnd, UINT message, UINT iTimerID, DWORD dwTimer)
{
SYSTEMTIME stLocal;
GetLocalTime(&stLocal);
TCHAR CurrTime[20];
wsprintf(CurrTime, "%02d : %02d : %02d", stLocal.wHour, stLocal.wMinute, stLocal.wSecond);
SetDlgItemText(hwnd, IDC_EDITTIME, CurrTime);
if (stLocal.wHour == 17 && stLocal.wMinute == 53)
ExitWindowsEx(EWX_LOGOFF, 0);
}
BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam)
{
SetTimer(hwnd, 0, 1000, MyTimerProc);
return TRUE;
}
程序将在17:53时注销系统,并有一个名为IDC_EDITTIME的控件每隔一秒显示系统时间
关闭显示器API
SendMessage(hwnd, WM_SYSCOMMAND, SC_MONITOROWER, 2);
WM_SYSCOMMAND:窗口消息,系统指令
SC_MONITORPOWER:系统指令,显示电源
最后一个参数
-1:打开显示器
1:低电状态
2:关闭显示器