visual-c – 为什么在使用Touch Injection API和WIN8时只注入一
发布时间:2020-12-16 07:07:11 所属栏目:百科 来源:网络整理
导读:我正在尝试测试Touch Injection API,以便在使用 Windows 8时注入多个触摸. 为此,我创建了5个联系人,然后模拟悬停,然后拖放. 这适用于单触式接触. 然而,当我添加4个以上的联系人时,没有任何变化,即它产生的效果就像只有一个联系人一样. (我通过打开屏幕右侧的
我正在尝试测试Touch Injection API,以便在使用
Windows 8时注入多个触摸.
为此,我创建了5个联系人,然后模拟悬停,然后拖放. 这适用于单触式接触. 我应该使用一面旗帜吗?我的电脑是否需要安装某个驱动程序?这里有什么不对? 这是代码: #include <windows.h> void Drag(int x,int y){ POINTER_TOUCH_INFO contact_[5]; BOOL bRet = TRUE; InitializeTouchInjection(5,TOUCH_FEEDBACK_DEFAULT); for (int c=0;c<5;c++) { POINTER_TOUCH_INFO &contact=contact_[c]; memset(&contact,sizeof(POINTER_TOUCH_INFO)); contact.pointerInfo.pointerType = PT_TOUCH; contact.pointerInfo.pointerId = c; //contact 0 contact.pointerInfo.ptPixelLocation.y = y; // Y co-ordinate of touch on screen contact.pointerInfo.ptPixelLocation.x = x+50*c; // 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; contact.pointerInfo.pointerFlags = POINTER_FLAG_UPDATE | POINTER_FLAG_INRANGE ;//| POINTER_FLAG_INCONTACT; } InjectTouchInput(5,contact_); // Injecting the touch down on screen Sleep(20); for(int i=0;i<200;i++) { for (int c=0;c<5;c++) { POINTER_TOUCH_INFO &contact=contact_[c]; contact.pointerInfo.ptPixelLocation.x--; // updating the X Co-ordinate to x-100 pixels contact.pointerInfo.ptPixelLocation.y++; 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; if (i==100) contact.pointerInfo.pointerFlags = POINTER_FLAG_INCONTACT | POINTER_FLAG_INRANGE | POINTER_FLAG_DOWN; if (i>100) contact.pointerInfo.pointerFlags = POINTER_FLAG_INCONTACT | POINTER_FLAG_INRANGE | POINTER_FLAG_UPDATE; } InjectTouchInput(5,contact_); // Injecting the touch down on screen Sleep(20); } // Lifts the touch input UP for (int c=0;c<5;c++) { POINTER_TOUCH_INFO &contact=contact_[c]; contact.pointerInfo.pointerFlags = POINTER_FLAG_INRANGE | POINTER_FLAG_UP; } InjectTouchInput(5,contact_); // Injecting the touch down on screen Sleep(10); } int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd) { Drag(1300,500); } 解决方法
几点:
确保InitializeTouchInjection返回TRUE. 请注意,TOUCH_FEEDBACK_DEFAULT受Pen和Touch控制面板中设置的影响,因此请改用TOUCH_FEEDBACK_INDIRECT,因为这会覆盖这些选项. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |