11

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

谢谢
/吉米

4

4 回答 4

5

我一直在寻找类似的东西,并发现这篇文章在 Windows 开发人员预览中使用触摸注入 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 触控手势入门

于 2012-04-10T02:32:16.877 回答
4

我自己没有机会尝试,但根据这篇文章,Windows 8 Dev Preview 中包含的模拟器允许使用鼠标模拟多点触控缩放和旋转手势。

您可以在此 BUILD 会议会话的大约 35:40 看到此演示: 用于构建 Metro 风格应用程序的工具

于 2011-09-21T22:50:41.063 回答
4

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

InjectTouchInput Windows 8 C# 不工作(返回 false)

于 2012-04-15T23:11:06.447 回答
0

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

于 2012-02-27T15:36:00.307 回答