区分用于Windows应用程序空闲时间检测的实际和合成GetLastInputInfo

时间:2017-01-24 13:17:47

标签: winapi

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

GetTickCount() - GetLastInputInfo's LASTINPUTINFO.dwTime

GetLastInputInfo似乎不区分真实用户输入事件和通过SendInput,keybd_event或mouse_event合成的事件。这会影响一个用户的机器,因为他们有一个软件调用其中一个功能。

2个问题:

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

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

1 个答案:

答案 0 :(得分:1)

  

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

是。您可以设置低级键盘和鼠标hookLowLevelKeyboardProc callback function收到KBDLLHOOKSTRUCT structure,其标记字段包含LLKHF_INJECTEDLLKHF_LOWER_IL_INJECTED,用于使用SendInput或{{生成的输入3}}

同样,keybd_event传递LowLevelMouseProc callback function,其标志字段包含LLMHF_INJECTEDLLMHF_LOWER_IL_INJECTED用于合成输入。

  

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

据我所知,注入的输入事件不包含任何信息,这些信息源自它们。