Detecting user idleness
Another Win32 thing that didn't make it into the framework... sometimes you need to know if the user is idle. Win32 provides a handy function for this, GetLastInputInfo. Here's the stuff you need to call it from C#:
[StructLayout(LayoutKind.Sequential)]
public struct LASTINPUTINFO
{
public Int32 cbSize;
public Int32 dwTime;
};
[DllImport("USER32.DLL", SetLastError=true)]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO ii);
int GetIdleTime()
{
LASTINPUTINFO ii = new LASTINPUTINFO();
ii.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(ii);
if (GetLastInputInfo(ref ii))
{
// Got it, return the delta
return Environment.TickCount - ii.dwTime;
} else
{
// Fill in your own blank here
}
}
Caveat: GetLastInputInfo doesn't work on the Win9x OS's, and there doesn't seem to be any way of using the other mechanism commonly used for detecting user idleness, installing a global keyboard and mouse hook via SetWindowsHookEx, from C#. Doh.