启动一个守护线程监控你程序主线程的cpu和内存使用情况,如果在你规定的一段时间没有变化,就启动锁定函数喽

解决方案 »

  1.   

    加个Timer,应该可以实现你的功能!
      

  2.   

    我怎么知道没有用户操做?也就是没有鼠标和键盘操做?
    启动线程检测cpu和内存也不行,比如机器有计划任务,虽然人没有动,但是机器还在不断的执行程序,而我要得仅仅是人不操作机器,并不是说机器上没有程序运行
      

  3.   

    说个思路不一定行在消息循环里在规定时间里没有检测到鼠标键盘消息,就认为超时前提是所有鼠标键盘消息必须都要送到消息循环里(无论在前台,后台,最小化等情况下)如果不行的话,考虑使用键盘Hook,鼠标Hook
      

  4.   

    Thread.sleep(100000000000000000000000000000000000000000000000);
    将当前线程阻塞**毫秒!
    或用Application.DoEvents 
    如果在代码中调用 DoEvents,则您的应用程序可以处理其他事件。
      

  5.   

    将当前现成阻塞肯定不行了,因为用户正在用,我怎么知道什么时候阻塞呢,而且用户可能随时使用系统呀。
    DoEvents是什么意思?
    大家想想,屏幕保护是怎么作的,为什么那个时间一过,屏保就启动呢
      

  6.   

    这个问题已经有人问过了
    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=169577里面的链接已给出代码
      

  7.   

    那个我看过,也就是受了它的误导才没法交差,那个Application.Idle事件是程序空闲时触发,实际上我的程序刚刚登录进入就空闲了,然后就锁定了,根本达不到要求
      

  8.   

    这个网址
    http://www.dotnet247.com/247reference/msgs/16/82105.aspx
    倒是可以解决问题,不过不知道键盘消息和鼠标消息的消息码是多少?
      

  9.   

    public enum HookType
        {
            WH_KEYBOARD = 2,
            WH_GETMESSAGE = 3,
            WH_MOUSE = 7
        }
      

  10.   

    谢谢,那个WH_GETMESSAGE = 3是个什么消息?
      

  11.   

    //下面的代码是当你的程序开启后却长时间没操作,提示是否退出程序!
    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;

    }
      

  12.   

    对,监听IDLE事件,同时用TIME进行计时就可以啦,这个思路比较不错