有没有办法在Windows 8中模拟触摸事件

时间:2011-09-21 22:37:50

标签: c# windows-7 touch windows-8

有没有办法在Windows 8中模拟触摸事件(最好是在Windows 7中) 我知道有一个名为Multi touch vista的项目,但我觉得它有点矫枉过正,我从来没有让它在多个屏幕上正常工作。
我想要做的很简单,我想启动一个可以向Windows发送触摸事件的应用程序,不需要多个鼠标或任何类似的东西。
它可以完成还是我需要一个(MMV)驱动程序来做到这一点?

感谢
/麦

4 个答案:

答案 0 :(得分:5)

我正在寻找类似的内容,发现这篇文章Simulating Touch Input in Windows Developer preview using Touch Injection APIsample code(C ++)可以回答你的问题。但是,这似乎仅适用于Windows 8(不是Windows 7)。

它模拟点击,保持,拖动,捏/平移,旋转和交叉滑动。

这是触摸(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

另一篇文章:Getting Started with Windows Touch Gestures

答案 1 :(得分:4)

我自己没有机会尝试,但根据this article,Windows 8 Dev Preview附带的模拟器允许使用鼠标模拟多点触控缩放和旋转手势。

您可以在本次BUILD会议的大约35:40看到此示例:Tools for building Metro style apps

答案 2 :(得分:4)

除了针对InjectTouchInput的C ++示例代码的解决方案之外,它还包含在Windows 8的User32.dll中,可以在此处找到C#解决方案:

InjectTouchInput Windows 8 C# not working (returns false)

答案 3 :(得分:0)

创建虚拟Hid驱动程序似乎是唯一的方法。