现在的位置: 首页 > 综合 > 正文

一个简单的保护视力的软件

2013年10月04日 ⁄ 综合 ⁄ 共 1333字 ⁄ 字号 评论关闭

身体是革命的本钱,眼睛是程序员的本钱

保护视力最好的办法是远离显示器,对于需要长期工作在显示器前的人来说,只要保持适当的距离,不要常时间盯着屏幕,工作一段时间后看看远方,就能很大程度的保护好自己的眼睛!

如果使自己离开屏幕呢?做一个定时提醒的小工具就行了!但是,提醒是一回事,能不能主动执行又是一回事,怎么强制执行呢?最好的办法是创建另外一个桌面,并将这个桌面切换到前面,让自己无法处理任何操作,只好去看看远方了;等过一段时间后,销毁桌面,再将计算机操作权交还给用户。

以下是就源代码,很简单,就不说明了

 

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;
}

抱歉!评论已关闭.