You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取Windows及应用程序的空闲时长(上次键鼠操作后时长)

获取Windows系统及应用程序上次输入时长的方案

a) 获取Windows系统上次输入后的时长

直接调用Windows API GetLastInputInfo 即可实现,该API会返回系统最后一次输入事件(鼠标/键盘操作)的时间戳,通过与当前系统时间计算差值得到空闲时长:

#include <windows.h>

DWORD GetSystemIdleTime() {
    LASTINPUT_INFO li = {0};
    li.cbSize = sizeof(LASTINPUTINFO);
    if (GetLastInputInfo(&li)) {
        return GetTickCount64() - li.dwTime; // 返回空闲时长(毫秒)
    }
    return 0;
}
  • LASTINPUTINFO结构体的dwTime字段存储了最后一次输入事件的系统Tick计数
  • GetTickCount64()获取当前系统Tick计数,两者差值即为系统空闲的毫秒数

b) 获取当前应用程序上次输入后的时长

无需逐个处理组件的输入事件,只需在应用程序的消息处理层面统一捕获输入类消息,维护一个全局时间戳变量,每次收到输入消息时更新该时间戳,最终通过计算当前时间与该时间戳的差值得到应用内空闲时长:

Win32原生程序示例

#include <windows.h>

DWORD g_lastAppInputTime = GetTickCount64(); // 初始化时间戳

LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
    // 捕获所有输入相关消息
    switch (uMsg) {
        case WM_MOUSEMOVE:
        case WM_LBUTTONDOWN:
        case WM_RBUTTONDOWN:
        case WM_KEYDOWN:
        case WM_CHAR:
        case WM_MBUTTONDOWN:
        case WM_XBUTTONDOWN:
            g_lastAppInputTime = GetTickCount64(); // 更新输入时间戳
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, uMsg, wParam, lParam);
}

DWORD GetAppIdleTime() {
    return GetTickCount64() - g_lastAppInputTime; // 返回应用内空闲时长(毫秒)
}

MFC程序示例

#include <afxwin.h>

DWORD g_lastAppInputTime = GetTickCount64();

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg) {
    // 在消息分发前捕获输入消息
    if (pMsg->message == WM_MOUSEMOVE || pMsg->message == WM_LBUTTONDOWN ||
        pMsg->message == WM_KEYDOWN || pMsg->message == WM_CHAR ||
        pMsg->message == WM_MBUTTONDOWN) {
        g_lastAppInputTime = GetTickCount64();
    }
    return CFrameWnd::PreTranslateMessage(pMsg);
}

DWORD GetAppIdleTime() {
    return GetTickCount64() - g_lastAppInputTime;
}

内容的提问来源于stack exchange,提问作者Michael Hutter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 17:40:48