当我登录进入主界面时,在规定的时间内没有做任何操作,系统就注销(就像电脑的屏保)。
用C# 怎样做呀?我怎样判断在主界面有没有做何操作?谢谢大家的帮助!

解决方案 »

  1.   

    参考如下代码,用windows api获取输入闲置时间
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;namespace WindowsApplication28
    {
        public partial class Form1 : Form
        {
            [StructLayout(LayoutKind.Sequential)]
            public struct LASTINPUTINFO
            {
                [MarshalAs(UnmanagedType.U4)]
                public int cbSize;
                [MarshalAs(UnmanagedType.U4)]
                public uint dwTime;
            }
            [DllImport("user32.dll")]
            public static extern bool GetLastInputInfo(ref   LASTINPUTINFO plii);
                    public long getIdleTick()
            {
                LASTINPUTINFO vLastInputInfo = new LASTINPUTINFO();
                vLastInputInfo.cbSize = Marshal.SizeOf(vLastInputInfo);
                if (!GetLastInputInfo(ref   vLastInputInfo)) return 0;
                return Environment.TickCount - (long)vLastInputInfo.dwTime;
            }        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                this.timer1.Interval = 2000;
                this.timer1.Enabled = true;        }
            private void timer1_Tick(object sender, EventArgs e)
            {
                long i = getIdleTick();
                this.Text = string.Format("jinjazz说:您已经{0}ms没有动了",i);
                if (i > 10 * 1000)
                {
                    this.WindowState = FormWindowState.Minimized;
                }
                else
                {
                    this.WindowState = FormWindowState.Normal;
                }
            }
             
        }
    }
      

  2.   

    另一思路,重载窗体的WndProc,判断其鼠标、键盘消息(我试过什么消息都不判断的话也行)
            protected override void WndProc(ref Message m)
            {
                base.WndProc(ref m);
                timeOut = 10;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                if (--timeOut == 0)
                    MessageBox.Show("Time is out!");
            }