身体是革命的本钱,眼睛是程序员的本钱
保护视力最好的办法是远离显示器,对于需要长期工作在显示器前的人来说,只要保持适当的距离,不要常时间盯着屏幕,工作一段时间后看看远方,就能很大程度的保护好自己的眼睛!
如果使自己离开屏幕呢?做一个定时提醒的小工具就行了!但是,提醒是一回事,能不能主动执行又是一回事,怎么强制执行呢?最好的办法是创建另外一个桌面,并将这个桌面切换到前面,让自己无法处理任何操作,只好去看看远方了;等过一段时间后,销毁桌面,再将计算机操作权交还给用户。
以下是就源代码,很简单,就不说明了
VOID CALLBACK TimerAPCProc(LPVOID lpArgToCompletionRoutine,
DWORD dwTimerLowValue,
DWORD dwTimerHighValue)
{
static HDESK hDesk = NULL;
if (hDesk)
{
return;
}
SYSTEMTIME st;
GetSystemTime(&st);
if (st.wMinute == 0 && st.wSecond == 0)
{
hDesk = CreateDesktop("Protect Eye",
NULL,
NULL,
0,
GENERIC_ALL,
NULL);
if (NULL == hDesk)
{
DWORD dwErr = GetLastError();
return;
}
SwitchDesktop(hDesk);
HANDLE hTimer = CreateWaitableTimer(NULL, TRUE, NULL);
LARGE_INTEGER liDueTime;
liDueTime.QuadPart = -300000000;
SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0);
WaitForSingleObject(hTimer, INFINITE);
CloseHandle(hTimer);
CloseDesktop(hDesk);
hDesk = NULL;
}
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
HANDLE hTimer = CreateWaitableTimer(NULL, FALSE, NULL);
if (! hTimer)
{
return 0;
}
LARGE_INTEGER liUTC = {0};
BOOL bSuccess = SetWaitableTimer(hTimer, &liUTC, 800, TimerAPCProc, NULL, FALSE);
if (bSuccess)
{
while(1)
{
SleepEx(INFINITE, TRUE);
}
}
CloseHandle(hTimer);
return 1;
}