Отправить события клавиатуры и мыши в приложение DirectX в C #? - PullRequest
1 голос
/ 11 мая 2011

Мне нужно отправить глобальные нажатия клавиш и события мыши в другое приложение, которое по совпадению использует DirectX. (Нет элементов управления / ручек, кроме самого окна)
Например, мне нужно удерживать клавишу X в течение 2 секунд, а затем отпустить ее ...
Мне нужно нажать правую кнопку мыши вниз по координатам x: 600 и y: 350, переместить мышь на 100 пикселей вниз и затем отпустить правую кнопку мыши.
Мне также нужно нажимать 2 или более клавиш одновременно, например, X и Y, и останавливать X через 2 секунды, а Y - еще через 2 секунды.
Так что, в принципе, мне нужен полный контроль над системой ввода ...
Также было бы идеально, если бы я мог управлять приложением в развернутом или в фоновом режиме. (опционально)

Для скептиков ... Учитель сделал приложение DirectX для рисования для нашей школы. Меня просят сделать приложение, которое рисует на нем образцы, например, поезд, цветок или что-то в этом роде ... Я буду читать изображения и использовать ввод, чтобы установить цвет и щелкнуть по холсту ...

Ответы [ 2 ]

2 голосов
/ 10 апреля 2014

Если вы хотите использовать библиотеку для C #, которая облегчит вашу работу, тогда прочитайте следующую ссылку -

http://www.codeproject.com/Articles/117657/InputManager-library-Track-user-input-and-simulate

Кроме .Net C #, вы можете использовать другую языковую альтернативу, такую ​​какв Java, где нет путаницы с прямым или обычным вводом -

http://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html

1 голос
/ 11 мая 2011

Есть несколько возможностей. Вы можете взглянуть на System.Windows.Forms.SendKeys и можете вызвать некоторые функции Win32, такие как SetForegroundWindow(), LockSetForegroundWindow(), из gdi32.dll или из user32.dll SetCursorPos() и mouse_event для выполнения кликов:

Вот фрагмент событий мыши, которые я использовал некоторое время назад.

    /**
     * Mouse functions
     */
    [DllImport("user32.dll", ExactSpelling=true)]
    public static extern long mouse_event(Int32 dwFlags, Int32 dx, Int32 dy, Int32 cButtons, Int32 dwExtraInfo);

    [DllImport("user32.dll", ExactSpelling=true)]
    public static extern void SetCursorPos(Int32 x, Int32 y); 

    public const Int32 MOUSEEVENTF_ABSOLUTE = 0x8000;
    public const Int32 MOUSEEVENTF_LEFTDOWN = 0x0002;
    public const Int32 MOUSEEVENTF_LEFTUP = 0x0004;
    public const Int32 MOUSEEVENTF_MIDDLEDOWN = 0x0020;
    public const Int32 MOUSEEVENTF_MIDDLEUP = 0x0040;
    public const Int32 MOUSEEVENTF_MOVE = 0x0001;
    public const Int32 MOUSEEVENTF_RIGHTDOWN = 0x0008;
    public const Int32 MOUSEEVENTF_RIGHTUP = 0x0010;

    public static void PerformLeftKlick(Int32 x, Int32 y)
    {
        SetCursorPos(x, y);
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
    }

Надеюсь, это подтолкнет вас в правильном направлении. Хороший ресурс http://pinvoke.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...