Есть ли способ имитировать события касания в Windows 8

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

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

Ответ 1

Я искал что-то подобное и нашел эту статью Имитировать сенсорный ввод в предварительном просмотре Windows Developer с помощью API Touch Injection API и sample код (С++) может ответить на ваш вопрос. Однако, похоже, это работает только на Windows 8 (а не на Windows 7).

Он имитирует Tap, Hold, Drag, Pinch/Pan, Rotate и Cross-Slide.

Вот код касания (Tap):

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

Ответ 2

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

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

Ответ 4

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