设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 5005|回复: 5
打印 上一主题 下一主题

[API] 【技巧】获取系统闲置了多久(用户多久没有操作)的源码

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2015-3-24 10:09:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我们有时需要在系统闲置时,去进行一些操作,如让系统进行自动备份,让系统弹出屏幕保护,让系统播放休息音乐,让系统自动杀毒 强制自动关机等等。但如何判断系统是否处理闲置状态呢,一般我们是判断最近有否输入或操作。这就需要用到API函数。完整代码如下:

Option Explicit
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean  '获取上一次输入的相关信息

'回答:这个boolean是返回值,真正的数据保存在plii里,VB默认是byref,在C语言里就是指针,也就是说这个函数的返回的东西会写到plii这个变量里
'关于这个API的用法在这里http://msdn.microsoft.com/en-us/library/ms646302(VS.85).aspx

Private Declare Function GetTickCount Lib "kernel32" () As Long'  此函数的作用是获得系统运行了多少时间(运行了多久),单位是毫秒
'MSDN原文:The GetTickCount function retrieves the number of milliseconds that have elapsed since the system was started.

Private Type LASTINPUTINFO
    cbSize As Long
    dwTime As Long
End Type
Dim lii As LASTINPUTINFO

Private Sub Form_Load()
Timer1.Interval = 1000
    lii.cbSize = Len(lii)'    '看API声明,API里要求这个变量的cbSize保存为这个变量的长度,这样才可以被API正确操作
End Sub

Private Sub Timer1_Timer()   '如果是Access中使用,请改为Form_Timer事件,且设置定时器间隔属性为1000毫秒--Office中国提醒
    If GetLastInputInfo(lii) Then
        If (GetTickCount - lii.dwTime) / 60000 >= 15 Then
            Shell "shutdown.exe -s -t 180"
            Call MsgBox("由于本机15分钟没有操作,如果3分钟后没有反应,系统将强制关机", vbYesNo + vbExclamation + vbDefaultButton2, "提示")
        End If
    End If
End Sub

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2015-3-24 11:02:16 | 只看该作者
额,想起了老汉的屁股与椅子……不过红尘那个帖子貌似打不开了

点击这里给我发消息

3#
 楼主| 发表于 2015-3-24 11:26:45 | 只看该作者
链接有问题,改好了

点击这里给我发消息

4#
发表于 2015-4-2 04:35:56 来自手机 | 只看该作者
强的 赞一个
5#
发表于 2016-8-4 08:54:43 | 只看该作者
好,顶一个
回复

使用道具 举报

6#
发表于 2016-8-11 12:46:40 | 只看该作者
保存了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-25 08:39 , Processed in 0.084302 second(s), 29 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表