c# winform 如何得知用户是否正在操作电脑
就像QQ的那个离开状态,当用户离开电脑不操作时,QQ就会检测到用户已离开,这个功能用C#如何做
还有就是不要建议我用全局钩子,因为这样会比较耗资源
就像QQ的那个离开状态,当用户离开电脑不操作时,QQ就会检测到用户已离开,这个功能用C#如何做
还有就是不要建议我用全局钩子,因为这样会比较耗资源
解决方案 »
- [分享]ext3文件系统读取器
- 熟Linq To Entity 的进来帮下忙,遇到麻烦了!
- 1000分求购C#读取TDrawGrid表格数据源代码
- C#中CreateFileMapping、MapViewOfFile怎么用?
- 已经三天了。。。。请大家帮忙想想问题所在。。。。
- 重写ColorDialog,使其无边框,类似word效果
- 请教各位大虾~~~~~~~
- 请问有那位使用过MicrosoftUpdaterApplicationBlock?
- 那里有反编译器(反编译成C#代码)下载
- 怎样才能让MDI里的子窗口打开一个?
- Developer Express Inc.NET.v3 中的xtraTabPage显示问题
- 求一个 float 正则表达式,希望给出详细的解释
namespace ActivityMonitor
{
using System;
using System.Runtime.InteropServices; class ActivityMonitor : System.ComponentModel.Component
{
public void Start()
{
this.isIdle = false;
timer.Elapsed -= Timer_Elapsed;
timer.Elapsed += Timer_Elapsed;
timer.Interval = this.resolution;
timer.Start();
} public void Stop()
{
timer.Stop();
} public bool IsIdle
{
get { return this.isIdle; }
private set
{
if (this.isIdle != value)
{
this.isIdle = value; if (isIdle && OnIdle != null)
{
OnIdle(this, EventArgs.Empty);
}
if (!isIdle && OnActive != null)
{
OnActive(this, EventArgs.Empty);
}
}
}
} public int IdleTimeOut
{
get { return idleTimeOut; }
set { idleTimeOut = Math.Max(50, value); }
} public int Resolution
{
get { return resolution; }
set { resolution = Math.Max(50, value); }
} public event EventHandler OnIdle;
public event EventHandler OnActive; private void Timer_Elapsed(object sender, EventArgs e)
{
LASTINPUTINFO lastInputInfo = new LASTINPUTINFO();
lastInputInfo.size = 8; if (GetLastInputInfo(ref lastInputInfo))
{
lastActivity = Math.Max(lastActivity, lastInputInfo.lastTick); int diff = Environment.TickCount - lastActivity;
this.IsIdle = diff > this.IdleTimeOut;
}
} private bool isIdle = false;
private int idleTimeOut = 5000;
private int resolution = 100;
private int lastActivity = Environment.TickCount;
private System.Timers.Timer timer = new System.Timers.Timer(); [StructLayout(LayoutKind.Sequential)]
private struct LASTINPUTINFO
{
public int size;
public int lastTick;
}
[DllImport("User32")]
private static extern bool GetLastInputInfo(ref LASTINPUTINFO lii);
} class UnitTest
{
static void Main()
{
ActivityMonitor monitor = new ActivityMonitor();
monitor.IdleTimeOut = 2000; // 2 seconds
monitor.OnIdle += delegate { Console.WriteLine("On idle"); };
monitor.OnActive += delegate { Console.WriteLine("On active"); }; monitor.Start();
Console.ReadLine();
}
}
}
It's my post on another thread. The monitor doesn't use hook but the GetLastInputInfo API.
我想使用c#做一个 检测键盘 鼠标 空闲状态的程序,请问有什么方法么?