Windows 8 でアプリケーションを切り替える簡単な方法は、タッチ スクリーンを使用して "右にスワイプ" することです (画面の左側に 1 本の指を置き、数ピクセル右に移動します)。Touch Injection APIを使用してこの動作をシミュレートしようとしていますが、スワイプが実際に行われていることを示すフィードバックが表示されますが、アプリの切り替え動作は呼び出されません。実行したコードは次のとおりです。
int main()
{
//Screen Resolution 1366x768
BOOL ret = TRUE;
//init
InitializeTouchInjection(10, TOUCH_FEEDBACK_INDIRECT);
POINTER_TOUCH_INFO contact = {0};
memset(&contact, 0, sizeof(POINTER_TOUCH_INFO));
contact.pointerInfo.pointerType = PT_TOUCH;
contact.pointerInfo.pointerId = 0;
//set start point (a point at the left side of the screen)
contact.pointerInfo.ptPixelLocation.y = 768/2;
contact.pointerInfo.ptPixelLocation.x = 0;
contact.touchFlags = TOUCH_FLAG_NONE;
contact.touchMask = TOUCH_MASK_CONTACTAREA | TOUCH_MASK_ORIENTATION | TOUCH_MASK_PRESSURE;
contact.orientation = 90;
contact.pressure = 32000;
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;
//set flags for "start touch"
contact.pointerInfo.pointerFlags = POINTER_FLAG_DOWN | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
ret = InjectTouchInput(1, &contact);
cout << "X: " << contact.pointerInfo.ptPixelLocation.x << " Y: " << contact.pointerInfo.ptPixelLocation.y << endl;
if(ret != TRUE)
{
cout << "Error 1: " << GetLastError() <<endl;
return 1;
}
for(int i=0; i<100; i++)
{
//set flags for "update"
contact.pointerInfo.pointerFlags = POINTER_FLAG_UPDATE | POINTER_FLAG_INRANGE | POINTER_FLAG_INCONTACT;
//move the location one pixel right
contact.rcContact.bottom = contact.pointerInfo.ptPixelLocation.x++;
ret = InjectTouchInput(1, &contact);
cout << "X: " << contact.pointerInfo.ptPixelLocation.x << " Y: " << contact.pointerInfo.ptPixelLocation.y << endl;
if(ret != TRUE)
{
cout << "Error 2: " << GetLastError() <<endl;
return 1;
}
}
//set flags for "end touch"
contact.pointerInfo.pointerFlags = POINTER_FLAG_UP;
ret = InjectTouchInput(1, &contact);
cout << "X: " << contact.pointerInfo.ptPixelLocation.x << " Y: " << contact.pointerInfo.ptPixelLocation.y << endl;
if(ret != TRUE)
{
cout << "Error 3: " << GetLastError() <<endl;
return 1;
}
return 0;
}
このコードが期待どおりに動作しない理由はありますか?
ちなみに、「左にスワイプ」してチャームバーを開こうとすると、同じことが起こります
コードはこの記事に関連して書かれています