有没有办法在 Windows 8 中模拟触摸事件(最好在 Windows 7 中)。
我知道有一个名为 Multi touch vista 的项目,但我觉得它有点矫枉过正,而且我从来没有让它在多个屏幕上正常工作。
我想做的很简单,我想启动一个应用程序,它可以向 Windows 发送触摸事件,而不需要多个鼠标或类似的东西。
可以完成还是我需要(MMV)驱动程序才能做到这一点?
谢谢
/吉米
我一直在寻找类似的东西,并发现这篇文章在 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 触控手势入门
我自己没有机会尝试,但根据这篇文章,Windows 8 Dev Preview 中包含的模拟器允许使用鼠标模拟多点触控缩放和旋转手势。
您可以在此 BUILD 会议会话的大约 35:40 看到此演示: 用于构建 Metro 风格应用程序的工具
除了指向包含在 Windows 8 的 User32.dll 中的 InjectTouchInput 的 C++ 示例代码的解决方案之外,可以在此处找到 C# 解决方案:
创建虚拟 Hid 驱动程序似乎是唯一的方法。