GetLastInputInfo計時使用者離開電腦及軟體在指定時間鎖定等

來源:互聯網
上載者:User

  GetLastInputInfo 計時鍵盤、滑鼠處於空閑狀態的時間,不清楚計時其他電腦I/O裝置的空閑狀態不?
  所以呢,這個函數使用方面很廣,可以計時使用者離開電腦之後的延展作用,比如屏保和當使用者離開時軟體自動鎖定。我在網上找到一個源碼,實現軟體在使用者未操作電腦到時後自動鎖定,見下文:
  

/************************************************************************/
/* 說明:
調用函數GetLastInputInfo()以後, 結構成員lpi.dwTime 中的值並非上次輸入事件
發生以後的毫秒數。而是上次輸入事件發生時的系統已耗用時間。相當於上次輸入事件
發生時執行了lpi.dwTime=::GetTickCount()。
::GetTickCount()-lpi.dwTime才是上次輸入事件發生以後的毫秒數。
*/
/************************************************************************/
//注意:windows2000以上系統才支援函數GetLastInputInfo()因此有可能需要在StdAfx.h中加上如下語句:
#define _WIN32_WINNT 0x0500
//或者:
#ifdef _WIN32_WINNT
#undef _WIN32_WINNT
#endif
#define _WIN32_WINNT 0x0500

//首先定義一個計時器計時事件的定義
#define GETLASTINPUTINFO 109

//然後寫一個Time計時器(具體計時器的產生步驟就不在敘述)

//1、在程式初始化的時候調用
m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);//設定擷取鍵盤和滑鼠處於空閑狀態的時間的計時器


//2、處理函數
void CNetAppSoftDlg::OnTimer(UINT nIDEvent)
{
LASTINPUTINFO lpi;
DWORD dwTime = 0;

switch(nIDEvent)
{
case GETLASTINPUTINFO://zhouzx 擷取鍵盤和滑鼠處於空閑狀態的時間

lpi.cbSize = sizeof(lpi);
GetLastInputInfo(&lpi);//關於此windows API介面的介紹,參見同檔案夾下的文檔
dwTime = ::GetTickCount()-lpi.dwTime;

if (dwTime >= 30000)//30秒
{
if (m_uGetLastInputInfo)
{
KillTimer(GETLASTINPUTINFO);
}
OnBnClickedButtonLock();
}
break;
default:
break;
}
CDialog::OnTimer(nIDEvent);
}

//3、在軟體解鎖後的地方重新開始新的計時
m_uGetLastInputInfo = SetTimer(GETLASTINPUTINFO, 500, NULL);

//4、在推出軟體的時候,如果計時器沒有停止,要關閉計時器
if (m_uGetLastInputInfo)
{
//結束擷取鍵盤和滑鼠處於空閑狀態的時間定時器
KillTimer(GETLASTINPUTINFO);
}

  提醒一下,對於計時器一定要注意釋放資源,killtimer多調用幾次沒有關係,程式不會崩潰。調用了N次Settimer,就得調用>=N次Killtimer。
  
我之前在一家公司實習,寫了一個模組,功能是傳遞一個控制代碼,然後監視使用者對這個控制代碼所代表的表單未操作計時,時間到達指定數值後執行預設操作。如果控制代碼為一個表單,而表單裡面還有子表單(包括控制項),若是對子表單操作,那麼也算是對指定控制代碼表單的操作,這時不會計時。當操作指定控制代碼表單的同級表單或父表單,那麼計時會生效。當然,這個也包括使用者離開電腦的計時。因為不涉及機密,所以我就把源碼放在下面。使用方法是用類產生一個對象,然後用對象CreateWindow建立一個隱藏表單,利用這個隱藏表單監視指定控制代碼表單,當然我不太清楚我這個類的使用開銷是如何的,歡迎指教,預設操作用回呼函數實現。可自行修改回呼函數介面。
  源碼下載:http://dl.dbank.com/c0a3db1dhg

【參考資料 感謝作者】
軟體在指定時間間隔內無滑鼠移動鍵盤點擊等動作自動鎖定的實現
 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.