【问题标题】:Differentiating real and synthesized GetLastInputInfo for Windows application idle time detection区分用于 Windows 应用程序空闲时间检测的真实和合成 GetLastInputInfo
【发布时间】:2017-01-24 13:17:47
【问题描述】:

我正在开发一个需要确定用户会话空闲时间的 Windows 桌面应用程序:

GetTickCount() - GetLastInputInfo's LASTINPUTINFO.dwTime

GetLastInputInfo 似乎无法区分真实的用户输入事件和通过 SendInput、keybd_event 或 mouse_event 合成的事件。这会影响一个用户的机器,因为他们有一个软件调用这些函数之一。

2 个问题:

  1. 我在桌面应用程序中是否有任何方法可以区分真实用户输入事件和合成用户输入事件?

  2. 我是否有任何方法 (ETW?) 来诊断什么软件正在调用函数来合成用户输入事件?

【问题讨论】:

    标签: winapi


    【解决方案1】:

    我在桌面应用程序中是否有任何方法可以区分真实用户输入事件和合成用户输入事件?

    是的。可以设置低级键盘鼠标hookLowLevelKeyboardProc callback function 接收一个KBDLLHOOKSTRUCT structure,其flags 字段包含LLKHF_INJECTEDLLKHF_LOWER_IL_INJECTED 用于使用SendInputkeybd_event 生成的输入。

    同样,LowLevelMouseProc callback function 被传递了一个MSLLHOOKSTRUCT structure,其flags 字段包含LLMHF_INJECTEDLLMHF_LOWER_IL_INJECTED 用于合成输入。

    我是否有任何方法(ETW?)来诊断什么软件正在调用函数来合成用户输入事件?

    据我所知,注入的输入事件不携带任何信息,它们来自哪个进程。

    【讨论】:

    • 在后一种情况下,您必须在每个正在运行的进程中手动挂钩SendInput()/keybd_event()/mouse_event()
    猜你喜欢
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2011-03-02
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多