我使用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保持不变。
这种延迟的原因是什么?怎么解决这个问题?