WPF模拟鼠标点击不如实际点击快

时间:2015-05-04 12:40:58

标签: c# wpf input automation pinvoke

我使用this SO answer中建议的SendInput方法在WPF窗口上模拟鼠标输入。
基本上我为MouseDown做的是:

//Some data initialization e.g. determine where to click
....
SetCursorPos(x, y);

var inputMouseDown = new INPUT { Type = 0 };
inputMouseDown.Data.Mouse.Flags = 0x0002; // left button down

var inputs = new[] { inputMouseDown };
SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));

并立即与之相同:

//Prepare as before
....

var inputMouseUp = new INPUT { Type = 0 };
inputMouseUp.Data.Mouse.Flags = 0x0004; // left button up

//Send input as before
....

当我使用此代码单击一个WPF按钮时,它按预期工作但延迟我无法解释:
我测量了从鼠标向上的时间,直到这个技术和实际点击控件的所需结果。
使用低级鼠标钩完成Mouse Up检测。
在我的所有测量中,似乎WPF处理的物理鼠标点击速度更快(~200ms),然后是模拟鼠标。

我通过各种调整尝试了数百次(例如,向下事件和向上事件之间的延迟)但是delta保持不变。

这种延迟的原因是什么?怎么解决这个问题?

0 个答案:

没有答案