Итак, я пытаюсь имитировать левый клик мыши и левую кнопку мыши, чтобы выполнить автоматическое перетаскивание.Попытка моделирования мыши Щелчок/перетаскивание
В настоящее время он находится в C# Winforms (да, winforms: |) и является немного гуся.
Как правило, после отправки щелчка, я хочу, чтобы он обновил позицию курсора на основе ввода Kinect. Сторона Kinect вещей прекрасна, но я не уверен, как найти, если кнопка все еще нажата или нет.
вот код, в котором я сейчас использую + некоторый psuedocode, чтобы лучше объяснить себя (делать пока).
class MouseImpersonator
{
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
private static extern void mouse_event(uint dwFlags, uint dx, uint dy, uint cButtons, uint dwExtraInfo);
private const int leftDown = 0x02;
private const int leftUp = 0x04;
public static void Grab(int xPos, int yPos)
{
Cursor.Position = new Point(xPos + 25, yPos + 25);
mouse_event(leftDown, (uint) xPos, (uint) yPos, 0, 0);
//do
//{
//Cursor.Position = new Point(KinectSettings.movement.LeftHandX, KinectSettings.movement.LeftHandY);
//} while (the left mouse button is still clicked);
}
public static void Release(int xPos, int yPos)
{
Cursor.Position = new Point(xPos + 25, yPos + 25);
mouse_event(leftUp, (uint) xPos, (uint) yPos, 0, 0);
}
}
Я имел охоту на Google и не могу найти что-нибудь для того, что мне нужно для эквивалентного WPF, кроме: http://msdn.microsoft.com/en-us/library/system.windows.input.mouse.aspx
Я немного из моей глубины, но любая помощи очень ценится.
Lucas.
-
-
Для информации о том, что пространство имен является частью WPF. Вы пытались установить логическую переменную в true, когда вы вводите Grab и False при входе в Release? –
Sneaky WPF, спасибо Марк, скорректировали вопрос. Я подумал о подходе bool, но подумал, что может быть что-то более элегантное. Если I/Anyone не может думать о другом подходе, он будет работать, просто пытаясь избежать того, чтобы всегда было легко выйти из игры :) – Lucas
Объявление неверно, последним аргументом является IntPtr. Пройдите IntPtr.Zero. –