Есть ли способ имитировать сенсорные события в Windows 8 - PullRequest
11 голосов
/ 22 сентября 2011

Есть ли способ имитировать сенсорные события в Windows 8 (и, предпочтительно, в Windows 7).
Я знаю, что есть проект под названием Multi Touch Vista, но я чувствую его немного излишним, и я никогда не работал с ним корректнонесколько экранов.
То, что я хочу сделать, очень просто, я хочу запустить приложение, которое может отправлять сенсорные события в Windows без необходимости использования нескольких мышей или чего-либо подобного.
Можно ли это сделать или мне нужно(MMV) драйвер для этого?

Спасибо
/ Джимми

Ответы [ 4 ]

5 голосов
/ 10 апреля 2012

Я искал что-то подобное и нашел эту статью Имитация сенсорного ввода в Windows Developer Preview с использованием Touch Injection API и пример кода (C ++) могут ответить на ваш вопрос.Однако, похоже, что это работает только в Windows 8 (не в Windows 7).

Имитирует нажатие, удержание, перетаскивание, сжатие / панорамирование, поворот и перекрестное скольжение.

Вот касание(Нажмите) код:

POINTER_TOUCH_INFO contact;
InitializeTouchInjection(1, TOUCH_FEEDBACK_DEFAULT); // Here number of contact point is declared as 1.
memset(&contact, 0, sizeof(POINTER_TOUCH_INFO)); 

contact.pointerInfo.pointerType = PT_TOUCH;
contact.pointerInfo.pointerId = 0;          //contact 0
contact.pointerInfo.ptPixelLocation.y = 200; // Y co-ordinate of touch on screen
contact.pointerInfo.ptPixelLocation.x = 300; // X co-ordinate of touch on screen

contact.touchFlags = TOUCH_FLAG_NONE;
contact.touchMask = TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE;
contact.orientation = 90; // Orientation of 90 means touching perpendicular to screen.
contact.pressure = 32000; 

// defining contact area (I have taken area of 4 x 4 pixel)
contact.rcContact.top = contact.pointerInfo.ptPixelLocation.y - 2;
contact.rcContact.bottom = contact.pointerInfo.ptPixelLocation.y + 2;
contact.rcContact.left = contact.pointerInfo.ptPixelLocation.x  - 2;
contact.rcContact.right = contact.pointerInfo.ptPixelLocation.x  + 2;


contact.pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
InjectTouchInput(1, &contact); // Injecting the touch down on screen

contact.pointerInfo.pointerFlags = POINTER_FLAG_UP;
InjectTouchInput(1, &contact); // Injecting the touch Up from screen

Другая статья: Начало работы с жестами Windows Touch

4 голосов
/ 16 апреля 2012

В дополнение к решению, которое указывает на пример кода C ++ для InjectTouchInput, который поставляется в комплекте с User32.dll в Windows 8, решение C # можно найти здесь:

InjectTouchInput Windows 8 C # не работает (возвращает false)

4 голосов
/ 22 сентября 2011

У меня не было возможности попробовать это самостоятельно, но согласно этой статье , симулятор, включенный в Windows 8 Dev Preview, позволяет имитировать жесты мультитач масштабирования и вращения с помощью мыши.

Пример этого можно увидеть примерно на 35:40 этого сеанса конференции BUILD: Инструменты для создания приложений в стиле Metro

0 голосов
/ 27 февраля 2012

Создание виртуального драйвера Hid представляется единственным способом.

...