windows程序自动锁屏功能的实现

这个问题来自论坛提问

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;
            }

        }

         
    }

}

posted on 2008-02-21 00:14  代码王子  阅读(128)  评论(0编辑  收藏  举报

导航