我需要一种可靠的方法来检查鼠标指针状态,并计算它改变了多少次,例如来自' normal'指向沙漏/圆圈的指针,反之亦然。它是性能测试的一部分,用于测量响应时间,确定某个业务流程是否已完成的唯一方法是通过观察鼠标指针,并计算它已经过多少次" normal"到了忙碌的"又回来了。一旦完成两次,该过程就完成了。我知道 - 这很可怕,也是一种垃圾处理方法,但这是我唯一可以使用的方法。 我已经实现了一些有用的东西,但它有一个至关重要的缺点:如果鼠标指针在线程进入睡眠状态时发生变化,那么我就会错过"这种变化,因此退出条件。我会将等待时间减少到5或10毫秒,但它仍然不是一个好的解决方案。
这是我的代码,让您了解正在发生的事情:
TimeSpan timePassed = new TimeSpan();
bool lastMousePointerState = ConvertMousePointerStateToBoolean(Mouse.CursorName);
bool currentMousePointerState = true;
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
while(pointerChanges <= 1 && timePassed.Seconds < synchDurationTimeout)
{
Thread.Sleep(100);
currentMousePointerState = ConvertMousePointerStateToBoolean(Mouse.CursorName);
var variableComparison = lastMousePointerState ^ currentMousePointerState;
if (variableComparison.Equals(true))
{
pointerChanges++;
}
timePassed = stopWatch.Elapsed;
lastMousePointerState = currentMousePointerState;
}
我查看this article,看看是否可以使用回调函数,以及文章描述 的工作原理,但只适用于鼠标操作,而不是州。由于我几乎没有回调和从.NET调用操作系统的经验,我希望有人可以告诉我a)我的想法通常是否可能,如果是这样b)也许提供一个工作的代码片段,会达到我的需要。
提前致谢!
编辑:我认为GetCursorInfo函数可能是我需要的,但描述非常简洁,对我来说没用; - )
答案 0 :(得分:0)
尽管这里有大量的回复,但我想回答我自己的问题:-) 我最终实现的(以及对我的目的来说足够好)是使用Atomic Object提供的code。 我只是从C ++代码生成dll,并使用循环来检查状态。它仍然不如回调/通知机制,但我需要完成这个,这是迄今为止最好的解决方案。