最近在開發項目時需要實現屏保功能,即使用者在設定的時間內沒有對系統進行操作時,系統將會自動進入屏保狀態。
為此封裝了一個擷取滑鼠鍵盤動作的類,並有一個方法可以返回使用者多長時間沒有作業系統的時間。
代碼如下:
public class MouseKeyBoardOperate
{
/// <summary>
/// 建立結構體用於返回捕獲時間
/// </summary>
[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
/// <summary>
/// 設定結構體塊容量
/// </summary>
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
/// <summary>
/// 抓獲的時間
/// </summary>
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
}
[DllImport("user32.dll")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
/// <summary>
/// 擷取鍵盤和滑鼠沒有操作的時間
/// </summary>
/// <returns>使用者上次使用系統到現在的時間間隔,單位為秒</returns>
public static long GetLastInputTime()
{
LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
if (!GetLastInputInfo(ref vLastInputInfo))
{
return 0;
}
else
{
long count = Environment.TickCount - (long)vLastInputInfo.dwTime;
long icount = count / 1000;
return icount;
}
}
}