程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> windows程序自動鎖屏功能的實現

windows程序自動鎖屏功能的實現

編輯:關於.NET

這個問題來自論壇提問

Q:當我登錄進入主界面時,在規定的時間內沒有做任何操作,系統就注銷(就像電腦的屏保)。

A: 其實很簡單,參考一個api函數就可以了:GetLastInputInfo,以下是參考代碼

演示程序在你10秒內沒有任何鼠標鍵盤活動既最小化,最小化後晃動鼠標即可復原

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;
      }
    }
    
  }
}
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved