如何检测进程是否移动了鼠标光标而不是用户?

问题描述 投票:0回答:1

可以移动调用mouse_event function或使用System.Windows.Forms.Cursor.Position属性的鼠标。我想知道的是,是否有可能知道使用我的软件的用户是否正在使用这些方法之一。

我知道可以检查用户的鼠标移动,例如,查看它是否发生得太快。但是我想知道是否还有其他更准确的方法,例如检查是否正在调用某个WinApi函数。

当鼠标物理移动时,是否会触发mouse_event函数?

或者对mouse_event函数的调用是否会再次进行系统调用,并调用“物理鼠标移动”所使用的实际函数?

c# winforms winapi mouseevent
1个回答
0
投票

我认为如果另一个进程通过代码更改了光标位置,并且不是由用户移动光标的位置,除非某些通过代码移动它的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

© www.soinside.com 2019 - 2024. All rights reserved.