使用回调检查鼠标指针状态

时间:2015-02-12 16:04:51

标签: c# windows callback mouse

我需要一种可靠的方法来检查鼠标指针状态,并计算它改变了多少次,例如来自' 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函数可能是我需要的,但描述非常简洁,对我来说没用; - )

1 个答案:

答案 0 :(得分:0)

尽管这里有大量的回复,但我想回答我自己的问题:-) 我最终实现的(以及对我的目的来说足够好)是使用Atomic Object提供的code。 我只是从C ++代码生成dll,并使用循环来检查状态。它仍然不如回调/通知机制,但我需要完成这个,这是迄今为止最好的解决方案。