日期:2014-05-20  浏览次数:20962 次

msn里有这个功能:如果我在5分钟为非活动状态则显示为离开。如何用c#实现了?
非活动状态也就是没有操作这个msn软件,程序如何检测用户是否操作(比如设置系统,发送消息等)了软件了?.net对样的全局事件是怎么响应的?有人知道吗?谢谢了

------解决方案--------------------
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
struct LASTINPUTINFO
{
[MarshalAs(UnmanagedType.U4)]
public int cbSize;
[MarshalAs(UnmanagedType.U4)]
public uint dwTime;
}

[DllImport( "user32.dll ")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

static long GetLastInputTime()
{
LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
if (!GetLastInputInfo(ref vLastInputInfo)) return 0;
return Environment.TickCount - (long)vLastInputInfo.dwTime;
}

private void Form1_Load(object sender, EventArgs e)
{
timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
Text = string.Format( "用户已经{0}秒没有路过了 ", GetLastInputTime() / 1000);
}

------解决方案--------------------
WINPROC(ref winmessage)
你打override可以看到