zoukankan      html  css  js  c++  java
  • 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;
                }

            }

             
        }

    }
  • 相关阅读:
    [转]ASP NET 缓存相关介绍及汇总
    比较经典的SQL行转列+分组集联
    平面向量的叉乘
    获得一点到三角形最近点
    检测线段是否有交集
    线段交集点计算
    UE4 移动设备 不显示影子问题
    Unity通过世界坐标系转换到界面坐标位置
    selemium 常用查找方法
    unity导入TexturePacker处理
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204967.html
Copyright © 2011-2022 走看看