<?xml version="1.0" encoding="UTF-8"?><item><title>Detecting user idleness</title><description>&lt;DIV&gt;Another Win32 &lt;FONT face=Arial&gt;thing&lt;/FONT&gt; that didn't make it into the framework... sometimes you need to know if the user is idle.&amp;nbsp; Win32 provides a handy function for this, GetLastInputInfo.&amp;nbsp; Here's the stuff you need to call it from C#:&lt;/DIV&gt;&#13;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;&#13;
&lt;DIV&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;[StructLayout(LayoutKind.Sequential)]&lt;BR&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;struct&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; LASTINPUTINFO &lt;BR&gt;{&lt;BR&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt; Int32 cbSize;&lt;BR&gt;&lt;FONT color=#0000ff&gt;public&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; Int32 dwTime;&lt;BR&gt;};&lt;BR&gt;&lt;BR&gt;&lt;/FONT&gt;&lt;FONT size=1&gt;&#13;
&lt;P&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;[DllImport("USER32.DLL", SetLastError=&lt;/FONT&gt;&lt;FONT face="Courier New" color=#0000ff&gt;true&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;)]&lt;BR&gt;&lt;FONT color=#0000ff&gt;private&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;static&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;extern&lt;/FONT&gt; &lt;FONT color=#0000ff&gt;bool&lt;/FONT&gt; GetLastInputInfo(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt; LASTINPUTINFO ii);&lt;/P&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/DIV&gt;&#13;
&lt;P&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;int&amp;nbsp;GetIdleTime()&lt;BR&gt;{&lt;BR&gt;&amp;nbsp; LASTINPUTINFO ii = &lt;FONT color=#0000ff&gt;new&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; LASTINPUTINFO();&lt;BR&gt;&amp;nbsp; ii.cbSize = System.Runtime.InteropServices.Marshal.SizeOf(ii);&lt;BR&gt;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT color=#0000ff&gt;if&lt;/FONT&gt; (GetLastInputInfo(&lt;FONT color=#0000ff&gt;ref&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT face="Courier New" size=2&gt; ii))&lt;BR&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#008000&gt;// Got it, return the delta&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/FONT&gt;&lt;FONT color=#0000ff&gt;return&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt; Environment.TickCount - ii.dwTime;&lt;BR&gt;&amp;nbsp; } else&lt;BR&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;FONT face="Courier New"&gt;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;FONT color=#008000&gt;//&amp;nbsp;Fill in your own blank here&lt;/FONT&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;BR&gt;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="Courier New"&gt;}&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&#13;
&lt;P dir=ltr&gt;Caveat:&amp;nbsp; 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#.&amp;nbsp; Doh.&lt;/P&gt;&#13;
&lt;P dir=ltr&gt;&lt;FONT size=1&gt;&amp;nbsp;&lt;/P&gt;&lt;/FONT&gt;</description><pubDate>Thu, 01 Sep 2005 19:17:06 GMT</pubDate></item>