如何在VBScript中获取最后一次按键或鼠标点击的时间戳?
VBS获取键盘/鼠标最后操作时间戳并记录日志
问题描述
我是VBS新手,想要实现一个后台循环运行的脚本,获取键盘或鼠标最后一次操作的时间戳,并将这些时间戳存储到日志文件中。我找到了VBA的KeyPress事件、MouseDown/MouseUp事件相关文档,但不知道怎么在代码里运用。
我的现有代码框架如下:
Dim keyTS, mouseTS, nowTS while(1) keyTS = '获取最后一次按键的时间戳' mouseTS = '获取最后一次鼠标点击的时间戳' nowTS = Now '记录每次循环的当前时间戳 ' 将keyTS、mouseTS和nowTS写入日志文件 wscript.sleep 60000 ' 每分钟循环一次 wend
解决方案说明
首先要明确:VBS本身没有原生的全局键盘/鼠标事件监听能力,你找到的VBA事件是针对Office应用程序控件(比如窗体文本框)的,没法直接用于系统级全局监听。要实现全局键鼠操作捕获,推荐用以下两种方案:
方案1:调用Windows API获取最后输入时间(简单高效)
Windows系统提供GetLastInputInfo API,可直接获取系统最后一次用户输入(键盘或鼠标操作)的时间戳,无需单独监听键鼠事件,适合你的需求。
完整代码示例:
Option Explicit ' 定义API相关结构和函数 Private Type LASTINPUTINFO cbSize As Long dwTime As Long End Type Private Declare PtrSafe Function GetLastInputInfo Lib "user32.dll" (ByRef plii As LASTINPUTINFO) As Boolean Private Declare PtrSafe Function GetTickCount Lib "kernel32.dll" As Long Dim logPath As String Dim lastInputTS As String ' 初始化日志文件到桌面 logPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\InputLog.txt" Do While True Dim li As LASTINPUTINFO li.cbSize = Len(li) If GetLastInputInfo(li) Then ' 计算最后输入的实际时间(转换开机毫秒数为系统时间) Dim idleMilliseconds As Long idleMilliseconds = GetTickCount() - li.dwTime lastInputTS = DateAdd("s", -idleMilliseconds / 1000, Now) Else lastInputTS = "无法获取输入时间" End If Dim nowTS As String nowTS = Now ' 追加写入日志 Dim fs As Object Set fs = CreateObject("Scripting.FileSystemObject") Dim logFile As Object Set logFile = fs.OpenTextFile(logPath, 8, True) ' 8代表追加模式 logFile.WriteLine "当前时间: " & nowTS & " | 最后一次输入时间: " & lastInputTS logFile.Close Set fs = Nothing WScript.Sleep 60000 ' 每分钟执行一次循环 Loop
方案2:全局钩子监听独立键鼠事件(复杂精准)
如果需要分别获取键盘、鼠标的独立操作时间,需要设置全局键盘/鼠标钩子。但VBS实现全局钩子涉及动态链接库调用、权限管理,新手容易出错,不推荐作为入门方案。
代码说明
GetLastInputInfo返回的是系统开机到最后一次输入的毫秒数,通过与当前GetTickCount的差值,转换为实际的最后操作时间。- 日志文件默认生成在桌面,每次循环追加记录当前时间和最后输入时间。
- 脚本可通过
wscript.exe后台运行,或cscript.exe在控制台运行。
内容的提问来源于stack exchange,提问作者Rounak Kumar
相关产品推荐
相关产品推荐

