大家好 :
    如何实现窗体在十秒钟之内无任何操作则自动最小化?

解决方案 »

  1.   


            private const int WM_NCHITTEST = 0x84;
            private System.Threading.Timer timer;        public Form1()
            {
                InitializeComponent();
            }        private void Form1_Load(object sender, EventArgs e)
            {
                timer = new System.Threading.Timer(delegate { this.WindowState = FormWindowState.Minimized; }, null, 10000, 10000);
            }        protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_NCHITTEST)
                    timer.Change(10000, 10000);
                base.WndProc(ref m);
            }
      

  2.   

    using System;
    using System.Drawing;
    using System.Collections;
    using System.ComponentModel;
    using System.Windows.Forms;
    using System.Runtime.InteropServices;[StructLayout(LayoutKind.Sequential)]
       public struct LASTINPUTINFO
      {
       [MarshalAs(UnmanagedType.U4)]
        public int cbSize;
       [MarshalAs(UnmanagedType.U4)]
        public uint dtTime;
      }
    //调用获取最后一次操作屏幕的时间(包括鼠标移动,键盘等)
      [DllImport("user32")]
       public static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);
      public long getIdleTick()
      {
       LASTINPUTINFO i = new LASTINPUTINFO();
       i.cbSize = Marshal.SizeOf(i);
       if(!GetLastInputInfo(ref i)) return 0;
       return Environment.TickCount -(long)i.dtTime;
      }
    private void OnNotOperation_Load(object sender, System.EventArgs e)
      {
    //开始TIMER的运行
       this.timer1.Interval=2000;
       this.timer1.Enabled =true;
      }private void timer1_Tick(object sender, System.EventArgs e)
      {
       long i = getIdleTick();
       this.label1.Text = String.Format("zyzhang,你已經{0}ms沒有動電腦了",i);
    //20秒内如果没有动作就锁定屏幕
       if(i>2*1000)
       {
        //this.WindowState = FormWindowState.Minimized;
    }
      

  3.   

    我想应该用time控件来弄吧,具体的就不知道啦!
      

  4.   

    timer不是可以kill吗?c#中也可以吧。
    最小化后,停止timer就行了。
      

  5.   

    窗体启动之后,打开一个timer,然后倒计时啊,如果10秒钟没有事件发生就最小化了
      

  6.   

    Timer所触发的事件是在另一个工作线程中执行的,所以这里需要注意线程间对UI控件的调用,包括窗体本身,都不能直接调用的.
    下面将代码分开写出来,因为一次总回复不成功.
      

  7.   

    public partial class Form1 : Form
        {
            private const int WM_NCHITTEST = 0x84;
            private System.Threading.Timer timer;        public Form1()
            {
                InitializeComponent();
            }
      

  8.   

    private void Form1_Load(object sender, EventArgs e)
            {
                try
                {
                    //先获取回调函数
                    System.Threading.TimerCallback tc = new System.Threading.TimerCallback(GetMinimized);
                    //然后再调用Timer类
                    timer = new System.Threading.Timer(tc, null, 10000, 10000);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            } 
      

  9.   

    接13楼代码:
     protected override void WndProc(ref Message m)
            {
                if (m.Msg == WM_NCHITTEST)
                    timer.Change(10000, 10000);
                base.WndProc(ref m);
            }
      

  10.   

    接15楼代码:
    //回调函数
            private void GetMinimized(object sender)
            {
                if (InvokeRequired)
                {
                    Invoke(new MethodInvoker(delegate() { this.WindowState = FormWindowState.Minimized; }));
                }
                else
                {
                    this.WindowState = FormWindowState.Minimized;
                }
            }
    至此全部粘贴完毕!12,13,15,16楼是一个完整的代码.