我正在开发一个需要确定用户会话空闲时间的Windows桌面应用程序:
GetTickCount() - GetLastInputInfo's LASTINPUTINFO.dwTime
GetLastInputInfo似乎不区分真实用户输入事件和通过SendInput,keybd_event或mouse_event合成的事件。这会影响一个用户的机器,因为他们有一个软件调用其中一个功能。
2个问题:
桌面应用程序中是否有任何方法可以区分真实用户输入事件和合成用户输入事件?
我是否有任何方法(ETW?)来诊断哪些软件正在调用函数来合成用户输入事件?
答案 0 :(得分:1)
桌面应用程序中是否有任何方法可以区分真实用户输入事件和合成用户输入事件?
是。您可以设置低级键盘和鼠标hook。 LowLevelKeyboardProc callback function收到KBDLLHOOKSTRUCT structure,其标记字段包含LLKHF_INJECTED
或LLKHF_LOWER_IL_INJECTED
,用于使用SendInput或{{生成的输入3}}
同样,keybd_event传递LowLevelMouseProc callback function,其标志字段包含LLMHF_INJECTED
或LLMHF_LOWER_IL_INJECTED
用于合成输入。
我是否有任何方法(ETW?)来诊断哪些软件正在调用函数来合成用户输入事件?
据我所知,注入的输入事件不包含任何信息,这些信息源自它们。