SendInput срабатывает через раз и отправляет не те сообщения окну
Есть программа на C#, она с некоторыми промежутками времени кликает по окну. Буквально 3 дня назад все работало, с тех пор код не меняла, но кликать стал как-то странно.
public static void clickLeftOnPoint(Point point)
{
if (!point.IsEmpty)
{
int x = Convert.ToInt32(point.X / 1.25);
int y = Convert.ToInt32(point.Y / 1.25);
Point offsetPoint = new Point(x + 5, y + 5);
WinApi.mouseClickLeft(offsetPoint.X, offsetPoint.Y);
Wait();
}
}
public static void mouseClickLeft(int x, int y)
{
IntPtr hwnd = getWindow();
SetForegroundWindow(hwnd);
ShowWindow(hwnd, 1);
UserHelper.Wait();
ClickLeftMouseButton(hwnd, x, y);
}
public static void ClickLeftMouseButton(IntPtr hwnd, int x, int y)
{
x = CalculateAbsoluteCoordinateX(x);
y = CalculateAbsoluteCoordinateY(y);
INPUT[] inputs = new INPUT[3];
inputs[0] = new INPUT
{
type = SendInputEventType.InputMouse,
mkhi = new MouseKeybdhardwareInputUnion
{
mi = new MouseInputData
{
dx = x,
dy = y,
mouseData = 0,
dwFlags = MouseEventFlags.MOUSEEVENTF_MOVE | MouseEventFlags.MOUSEEVENTF_ABSOLUTE
}
}
};
inputs[1] = new INPUT
{
type = SendInputEventType.InputMouse,
mkhi = new MouseKeybdhardwareInputUnion
{
mi = new MouseInputData
{
dx = x,
dy = y,
mouseData = 0,
dwFlags = MouseEventFlags.MOUSEEVENTF_LEFTDOWN | MouseEventFlags.MOUSEEVENTF_LEFTUP
}
}
};
var result = SendInput((uint)inputs.Length, inputs, Marshal.SizeOf(typeof(INPUT)));
Console.WriteLine("Result: " + result);
}
В некоторые места клик проходит и я вижу сообщения (предварительно активирую окно):

Дальше начинается самое странное (отправляется сообщение WM_SETCURSOR, а сообщения кликов - нет):

Не сильна в WinApi, не особо понимаю, почему недавно работало, а теперь перестало. Пробовала использовать другие способы клика, но там вообще сообщения в окно не проходят.
Создается впечатление, что первый клик проходит всегда, а последующие как будто блокируются, визуально окно остается активным, но сообщения на клики игнорятся