2

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;
}

このコードが期待どおりに動作しない理由はありますか?

ちなみに、「左にスワイプ」してチャームバーを開こうとすると、同じことが起こります

コードはこの記事に関連して書かれています

4

0 に答える 0