1 /************************************************************************/ 2 /* 說明: 3 調用函數GetLastInputInfo()以后, 結構成員lpi.dwTime 中的值並非上次輸入事件 4 發生以后的毫秒數。而是上次輸入事件發生時的系統運行時間。相當於上次輸入事件 5 發生時執行了lpi.dwTime=::GetTickCount()。 6 ::GetTickCount()-lpi.dwTime才是上次輸入事件發生以后的毫秒數。 7 */ 8 /************************************************************************/ 9 //注意:windows2000以上系統才支持函數GetLastInputInfo()因此有可能需要在StdAfx.h中加上如下語句: 10 #define _WIN32_WINNT 0x0500 11 //或者: 12 #ifdef _WIN32_WINNT 13 #undef _WIN32_WINNT 14 #endif 15 #define _WIN32_WINNT 0x0500 16 17 //首先定義一個計時器計時事件的定義 18 #define GETLASTINPUTINFO 109 19 20 //然后寫一個Time計時器(具體計時器的生成步驟就不在敘述) 21 22 //1、在程序初始化的時候調用 23 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);//設置獲取鍵盤和鼠標處於空閑狀態的時間的計時器 24 25 26 //2、處理函數 27 void CNetAppSoftDlg::OnTimer(UINT nIDEvent) 28 { 29 LASTINPUTINFO lpi; 30 DWORD dwTime = 0; 31 32 switch(nIDEvent) 33 { 34 case GETLASTINPUTINFO://zhouzx 獲取鍵盤和鼠標處於空閑狀態的時間 35 36 lpi.cbSize = sizeof(lpi); 37 GetLastInputInfo(&lpi);//關於此windows API接口的介紹,參見同文件夾下的文檔 38 dwTime = ::GetTickCount()-lpi.dwTime; 39 40 if (dwTime >= 30000)//30秒 41 { 42 if (m_uGetLastInputInfo) 43 { 44 KillTimer(GETLASTINPUTINFO); 45 } 46 OnBnClickedButtonLock(); 47 } 48 break; 49 default: 50 break; 51 } 52 CDialog::OnTimer(nIDEvent); 53 } 54 55 //3、在軟件解鎖后的地方重新開始新的計時 56 m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL); 57 58 //4、在推出軟件的時候,如果計時器沒有停止,要關閉計時器 59 if (m_uGetLastInputInfo) 60 { 61 //結束獲取鍵盤和鼠標處於空閑狀態的時間定時器 62 KillTimer(GETLASTINPUTINFO); 63 }
轉載:http://www.cnblogs.com/ziwuge/archive/2011/12/22/2296559.html