如题
想做个1小时鼠标键盘无动作,自动关机的程序。。。
Windows的屏保里面的电源管理 有问题。无法使用这功能,自己想做一个,实现这个功能。
怎样用VB获取系统不响应时间(就是鼠标键盘无动作)?
答案:3 悬赏:40 手机版
解决时间 2021-01-31 10:05
- 提问者网友:不爱我么
- 2021-01-31 03:42
最佳答案
- 五星知识达人网友:蓝房子
- 2021-01-31 04:46
' 获得鼠标和键盘动作的Api
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type
' 获得当前时间 单位为毫秒
Private Declare Function GetTickCount Lib "kernel32" () As Long
' 控制系统关机的Api
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Const EWX_SHUTDOWN = 1
Const EWX_LOGOFF = 0
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Dim mEvent As LASTINPUTINFO
Dim StopTime As Long ' 鼠标和键盘,开始无动作的时间
Dim PrvEvent As Long ' 上一次鼠标或者键盘的状态
Private Sub Timer1_Timer()
mEvent.cbSize = Len(mEvent)
GetLastInputInfo mEvent
Debug.Print mEvent.dwTime
' 判断鼠标和键盘的状态,如果状态改变,则重新设置监视时间,保存当前状态
If mEvent.dwTime <> PrvEvent Then
PrvEvent = mEvent.dwTime
StopTime = GetTickCount
Else
' 如果当前时间与开始监视时间超过3,600,000 Ms 则关机.
If (GetTickCount - StopTime) >= (60 * 60 * 1000) Then
Call ExitWindowsEx(EWX_LOGOFF Or EWX_FORCE Or EWX_SHUTDOWN, 0)
End If
End If
End Sub
窗体上有个Timer控件,Name:Timer1
刚写的,2000 server + vb6.0 测试通过
Private Declare Function GetLastInputInfo Lib "user32" (plii As LASTINPUTINFO) As Boolean
Private Type LASTINPUTINFO
cbSize As Long
dwTime As Long
End Type
' 获得当前时间 单位为毫秒
Private Declare Function GetTickCount Lib "kernel32" () As Long
' 控制系统关机的Api
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Const EWX_SHUTDOWN = 1
Const EWX_LOGOFF = 0
Const EWX_REBOOT = 2
Const EWX_FORCE = 4
Dim mEvent As LASTINPUTINFO
Dim StopTime As Long ' 鼠标和键盘,开始无动作的时间
Dim PrvEvent As Long ' 上一次鼠标或者键盘的状态
Private Sub Timer1_Timer()
mEvent.cbSize = Len(mEvent)
GetLastInputInfo mEvent
Debug.Print mEvent.dwTime
' 判断鼠标和键盘的状态,如果状态改变,则重新设置监视时间,保存当前状态
If mEvent.dwTime <> PrvEvent Then
PrvEvent = mEvent.dwTime
StopTime = GetTickCount
Else
' 如果当前时间与开始监视时间超过3,600,000 Ms 则关机.
If (GetTickCount - StopTime) >= (60 * 60 * 1000) Then
Call ExitWindowsEx(EWX_LOGOFF Or EWX_FORCE Or EWX_SHUTDOWN, 0)
End If
End If
End Sub
窗体上有个Timer控件,Name:Timer1
刚写的,2000 server + vb6.0 测试通过
全部回答
- 1楼网友:未来江山和你
- 2021-01-31 05:26
简单!
用 api 函数,enablewindow()。
详细说明:
让窗口拒绝接受键盘和鼠标事件
声明:
private declare function enablewindow lib "user32" (byval hwnd as long, byval fenable as long) as long
使用:
'拒绝接受键盘和鼠标事件
call enablewindow(form.hwnd, 0)
'允许接受键盘和鼠标事件
call enablewindow(form.hwnd, 1)
- 2楼网友:几近狂妄
- 2021-01-31 04:57
下个钩子,然后不停的捕捉 键盘和鼠标事件
如果1个小时没捕捉到
关机
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯