InjectTouchInput неправильно работает с WPF .Приложение NET Framework

#c# #.net #wpf #automation #touch

Вопрос:

Я готовлю простое приложение, цель которого-отправлять события «Прикосновения» в любое место на экране. У меня есть какое — то решение, но оно не работает, когда событие «Касание» отправляется, например, в приложение WPF (.NET Framework), чтобы нажать кнопку в приложении WPF. Вот код:

         private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            NativeMethods.InitializeTouchInjection(1, TouchFeedback.INDIRECT);
            Touch(360, 220);
        }

        private void Touch(int X, int Y)
        {
            // Touch Down
            PointerTouchInfo contact = CreatePointerInfo(X, Y, 2);
            PointerFlags pointerFlags = PointerFlags.DOWN | PointerFlags.INRANGE | PointerFlags.INCONTACT;
            contact.PointerInfo.PointerFlags = pointerFlags;
            NativeMethods.InjectTouchInput(1, new[] { contact });

            //Touch Up
            contact.PointerInfo.PointerFlags = PointerFlags.UP;
            NativeMethods.InjectTouchInput(1, new[] { contact });
        }

        private PointerTouchInfo CreatePointerInfo(int x, int y, int radius)
        {
            PointerTouchInfo contact = new PointerTouchInfo();
            contact.PointerInfo.pointerType = PointerInputType.TOUCH;
            contact.TouchFlags = TouchFlags.NONE;
            contact.Orientation = 90;
            contact.Pressure = 100;
            contact.TouchMasks = TouchMask.CONTACTAREA | TouchMask.ORIENTATION | TouchMask.PRESSURE;
            contact.PointerInfo.PtPixelLocation.X = x;
            contact.PointerInfo.PtPixelLocation.Y = y;  
            uint unPointerId = IdGenerator.GetUinqueUInt();
            contact.PointerInfo.PointerId = unPointerId;
            contact.ContactArea.left = x - radius;
            contact.ContactArea.right = x   radius;
            contact.ContactArea.top = y - radius;
            contact.ContactArea.bottom = y   radius;
            return contact;
        }
 

Таким образом, в основном важная часть происходит в функции «Прикосновение». Этот фрагмент кода работает отлично, если, как я уже сказал, он не используется в приложении WPF, ориентированном на платформу .NET Framework. Когда это решение используется с приложением WPF, ориентированным на .NET Core 3.1, все работает нормально.

Я попытался поиграть с некоторыми свойствами, такими как «Указатели», «ориентация», «давление» и т. Д., Но без какого-либо эффекта. Я не вижу, делаю ли я что-то не так, это похоже на какую-то ошибку, которая приводит к неправильной работе «Touch» и приложения WPF, ориентированного на .NET Framework.

Любые предложения высоко ценятся.