检测应用程序活动时间(在Application.Idle之后)

时间:2014-03-11 21:54:10

标签: .net c#-4.0 timer idle-timer

我想要一个简单的方法来检查应用程序何时繁忙以及何时处于空闲状态。在做了一些搜索后,我发现了人们建议的两种方式。一个是我们的GetLastInputInfo函数,另一个是Application.Idle。

我只想检测应用程序不活动而不是系统不活动。所以我打算使用Application.Idle。但是现在如何在应用程序再次激活时触发事件?我在Idle事件中启动计时器,我希望在另一个函数中重置它。

任何帮助都将不胜感激。

我的事件处理程序:

void Application_Idle(object sender, EventArgs e)
{
    System.Timers.Timer aTimer = new System.Timers.Timer(5000);
    aTimer.Elapsed += aTimer_Elapsed;
    aTimer.Enabled = true;
}

1 个答案:

答案 0 :(得分:1)

考虑使用IMessageFilter.PreFilterMessage方法来查找"唤醒"来自空闲的应用程序。下面的示例来自我在VB中编写的应用程序,但原理是相同的。

您还可以过滤消息以确定哪些操作意味着"唤醒",例如鼠标是否超过计数?或者只有鼠标点击和按键?

private void DoDrag(object sender, MouseButtonEventArgs ev)
{
    _dragSource.GiveFeedback +=
        (s, e) => _positionTextBlock.Text = Mouse.PrimaryDevice.GetPosition(_canvas).ToString();
    DragDrop.DoDragDrop(_dragSource, "abc", DragDropEffects.Move);
}

参考:https://msdn.microsoft.com/en-us/library/system.windows.forms.imessagefilter.prefiltermessage(v=vs.100).aspx