可以移动调用mouse_event function或使用System.Windows.Forms.Cursor.Position属性的鼠标。我想知道的是,是否有可能知道使用我的软件的用户是否正在使用这些方法之一。
我知道可以检查用户的鼠标移动,例如,查看它是否发生得太快。但是我想知道是否还有其他更准确的方法,例如检查是否正在调用某个WinApi函数。
当鼠标物理移动时,是否会触发mouse_event函数?
或者对mouse_event函数的调用是否会再次进行系统调用,并调用“物理鼠标移动”所使用的实际函数?
我认为如果另一个进程通过代码更改了光标位置,并且不是由用户移动光标的位置,除非某些通过代码移动它的WinAPI拥有可以注册的事件,否则我不会发出警告。
这不是标准的WinAPI行为,我对此没有任何发现。
您所要做的就是注册OnMouseMove,无论是用户还是其他代码都将警告您更改。
也就是说,也许您可以尝试以下操作。
您可以检测到计算机是否空闲
并且使用根据状态分配给true或false的条件变量,因此当引发OnMouseMove时,您可以检查此布尔值。
但是:
您应该测试一下是否可以正常工作。
如果计算机尚未闲置,它将无法工作...
您可以检测到最后的用户输入
我还发现这是为了获得最后的用户输入时间,因此您可以测试它是否可以使用户或代码移动有所不同。
当OnMouseMove抬起时,请将该时间与现在进行比较。如果差异超过一个增量(以毫秒为单位)(进行一些测试以建立潜在的滞后时间),就可以完成。
但是在这里您可以区分鼠标和键区...
C# - Detect time of last user interaction with the OS
http://joelabrahamsson.com/detecting-mouse-and-keyboard-input-with-net/
https://www.codeproject.com/Articles/9104/How-to-check-for-user-inactivity-with-and-without