gpt4 book ai didi

c# - 如何确定 C# 应用程序中的空闲时间?

转载 作者:太空宇宙 更新时间:2023-11-03 17:43:05 25 4
gpt4 key购买 nike

我想从我的应用程序中获取 Windows 空闲时间。我正在使用这段代码:

http://dataerror.blogspot.de/2005/02/detect-windows-idle-time.html

我已经在 Windows 7 上测试过它并且它工作正常,但我在 Windows 8 上只得到零。

有什么办法解决这个问题吗?

最佳答案

我对你的方法采取了稍微不同的方法......这决定了你的应用程序的空闲时间,而不是使用系统范围的空闲时间。我不确定这是否满足您的需求,但它可能会帮助您走得更远。它还具有作为纯 .NET 而不是使用 DllImport 的好处。

public partial class MyForm : Form, IMessageFilter {

private Timer _timer;

// we only need one of these methods...
private DateTime _wentIdle;
private int _idleTicks;

public MyForm() {

// watch for idle events and any message that might break idle
Application.Idle += new EventHandler(Application_OnIdle);
Application.AddMessageFilter(this);

// use a simple timer to watch for the idle state
_timer = new Timer();
_timer.Tick += new EventHandler(Timer_Exipred);
_timer.Interval = 1000;
_timer.Start();

InitializeComponent();
}

private void Timer_Exipred(object sender, EventArgs e) {
TimeSpan diff = DateTime.Now - _wentIdle;

// see if we have been idle longer than our configured value
if (diff.TotalSeconds >= Settings.Default.IdleTimeout_Sec) {
_statusLbl.Text = "We Are IDLE! - " + _wentIdle;
}

/** OR **/

// see if we have gone idle based on our configured value
if (++_idleTicks >= Settings.Default.IdleTimeout_Sec) {
_statusLbl.Text = "We Are IDLE! - " + _idleTicks;
}
}

private void Application_OnIdle(object sender, EventArgs e) {
// keep track of the last time we went idle
_wentIdle = DateTime.Now;
}

public bool PreFilterMessage(ref Message m) {
// reset our last idle time if the message was user input
if (isUserInput(m)) {
_wentIdle = DateTime.MaxValue;
_idleTicks = 0;

_statusLbl.Text = "We Are NOT idle!";
}

return false;
}

private bool isUserInput(Message m) {
// look for any message that was the result of user input
if (m.Msg == 0x200) { return true; } // WM_MOUSEMOVE
if (m.Msg == 0x020A) { return true; } // WM_MOUSEWHEEL
if (m.Msg == 0x100) { return true; } // WM_KEYDOWN
if (m.Msg == 0x101) { return true; } // WM_KEYUP

// ... etc

return false;
}
}

这里我真的有两种方法来确定空闲...一种使用 DateTime 对象,另一种使用简单的计数器。您可能会发现其中之一更适合您的需求。

有关您可能希望将其视为用户输入的消息列表,请访问 here .

关于c# - 如何确定 C# 应用程序中的空闲时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com