如何让程序在没有用户动作一定时间后自动执行一段代码? 启动一个守护线程监控你程序主线程的cpu和内存使用情况,如果在你规定的一段时间没有变化,就启动锁定函数喽 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 加个Timer,应该可以实现你的功能! 我怎么知道没有用户操做?也就是没有鼠标和键盘操做?启动线程检测cpu和内存也不行,比如机器有计划任务,虽然人没有动,但是机器还在不断的执行程序,而我要得仅仅是人不操作机器,并不是说机器上没有程序运行 说个思路不一定行在消息循环里在规定时间里没有检测到鼠标键盘消息,就认为超时前提是所有鼠标键盘消息必须都要送到消息循环里(无论在前台,后台,最小化等情况下)如果不行的话,考虑使用键盘Hook,鼠标Hook Thread.sleep(100000000000000000000000000000000000000000000000);将当前线程阻塞**毫秒!或用Application.DoEvents 如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。 将当前现成阻塞肯定不行了,因为用户正在用,我怎么知道什么时候阻塞呢,而且用户可能随时使用系统呀。DoEvents是什么意思?大家想想,屏幕保护是怎么作的,为什么那个时间一过,屏保就启动呢 这个问题已经有人问过了http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=169577里面的链接已给出代码 那个我看过,也就是受了它的误导才没法交差,那个Application.Idle事件是程序空闲时触发,实际上我的程序刚刚登录进入就空闲了,然后就锁定了,根本达不到要求 这个网址http://www.dotnet247.com/247reference/msgs/16/82105.aspx倒是可以解决问题,不过不知道键盘消息和鼠标消息的消息码是多少? public enum HookType { WH_KEYBOARD = 2, WH_GETMESSAGE = 3, WH_MOUSE = 7 } 谢谢,那个WH_GETMESSAGE = 3是个什么消息? //下面的代码是当你的程序开启后却长时间没操作,提示是否退出程序!public class Form1 : System.Windows.Forms.Form,System.Windows.Forms.IMessageFilter//....... Application.Idle+=new EventHandler(FrmParent.IdleFun); Application.AddMessageFilter(FrmParent); Application.Run(); // 启动独立的应用程序线程//...........//用于程序长时间打开,却无操作,退出程序 private void timer1_Tick(object sender, System.EventArgs e) { //这个程序是当程序没有在监听指令状态时,而且时间超过1小时后,自动退出! if(++count>60*60) { timer1.Stop(); if (MessageBox.Show ("你打开程序时间很长,却没有任何操作,是否退出应用程序?", "终端模拟程序", MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes) { timer1.Dispose(); Application.Exit(); } else { count=0; } } } } private void IdleFun(object o,System.EventArgs e) { timer1.Start(); } public bool PreFilterMessage(ref System.Windows.Forms.Message m) { if(m.Msg!=0x0113) { timer1.Stop(); count=0; } 对,监听IDLE事件,同时用TIME进行计时就可以啦,这个思路比较不错 dataGridView1 这样添加数据 为什么每次rows.add的时候 cells就为空了 日历控件Calendar中判断day和week的方法 C#调用cmd去执行批量的很多命令 动态调用不用服务器上的WCF服务 有没有类似字典的书 (c#) c# 中使用那种计时器cup消耗小 c#怎么设置excel的格式 问个xml内插入节点的问题,插入xml字符串 帮帮小弟吧!!!这是我所有的 家当 了!!关于跨窗体托动的问题。 求救:一定要看看!!关于字节和汉字的转化问题 哪有combobox下载?急用! 请大家给我提供一个删除xml节点的例子,谢谢!
启动线程检测cpu和内存也不行,比如机器有计划任务,虽然人没有动,但是机器还在不断的执行程序,而我要得仅仅是人不操作机器,并不是说机器上没有程序运行
将当前线程阻塞**毫秒!
或用Application.DoEvents
如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。
DoEvents是什么意思?
大家想想,屏幕保护是怎么作的,为什么那个时间一过,屏保就启动呢
http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=169577里面的链接已给出代码
http://www.dotnet247.com/247reference/msgs/16/82105.aspx
倒是可以解决问题,不过不知道键盘消息和鼠标消息的消息码是多少?
{
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_MOUSE = 7
}
public class Form1 : System.Windows.Forms.Form,System.Windows.Forms.IMessageFilter
//.......
Application.Idle+=new EventHandler(FrmParent.IdleFun);
Application.AddMessageFilter(FrmParent);
Application.Run(); // 启动独立的应用程序线程
//...........
//用于程序长时间打开,却无操作,退出程序
private void timer1_Tick(object sender, System.EventArgs e)
{
//这个程序是当程序没有在监听指令状态时,而且时间超过1小时后,自动退出!
if(++count>60*60)
{
timer1.Stop();
if (MessageBox.Show ("你打开程序时间很长,却没有任何操作,是否退出应用程序?", "终端模拟程序", MessageBoxButtons.YesNo, MessageBoxIcon.Question)== DialogResult.Yes)
{
timer1.Dispose();
Application.Exit(); }
else
{
count=0;
}
}
}
} private void IdleFun(object o,System.EventArgs e)
{
timer1.Start();
} public bool PreFilterMessage(ref System.Windows.Forms.Message m)
{
if(m.Msg!=0x0113)
{
timer1.Stop();
count=0;
}