我正在尝试从这个线程实现空闲检测:Hide mouse cursor after an idle time
我对它做了很少的改动,但我遇到了垃圾测试MessageBox的问题。
void activityWorker_Tick(object sender, EventArgs e)
{
bool checkIdle = (User32Interop.GetLastInput() > activityThreshold);
if (isIdle != checkIdle)
{
if (checkIdle && (DateTime.Now.Subtract(idleCheckTimestamp) > TimeSpan.FromMinutes(1)))
{
System.Windows.Forms.MessageBox.Show("Idle: " + count);
idleCheckTimestamp = DateTime.Now;
count++;
}
isIdle = checkIdle;
}
}
每次此事件触发时,都会显示消息框,但在其运行后没有任何内容,因此似乎无法阻止其发送垃圾邮件。它不会重置时间戳,也不会增加计数变量,它只是使用“空闲:0”阻止消息框。
有人能指出我正确的方向,让它停止发送垃圾邮件吗?我希望系统不断检查空闲时间,但我只希望我的代码每分钟触发一次。如果它实际上是空闲的话。或者等等。
答案 0 :(得分:1)
您可以通过保留变量并存储最后发送消息的时间来执行此操作,然后您可以检查是否已经过了1分钟,然后您可以再次显示消息。例如:
DateTime LastMessageSentOn;
//Initialize it in constructor or anywhere else before using.
void activityWorker_Tick(object sender, EventArgs e)
{
bool checkIdle = (User32Interop.GetLastInput() > activityThreshold);
if (isIdle != checkIdle)
{
if (checkIdle && LastMessageSentOn.AddMintues(1)<DateTime.Now)
{
System.Windows.Forms.MessageBox.Show("Idle: " + count);
LastMessageSentOn = DateTime.Now;
count++;
}
isIdle = checkIdle;
}
}
答案 1 :(得分:1)