首页 > 解决方案 > InjectTouchInput 无法与 WPF .NET Framework 应用程序一起正常工作

问题描述

我正在准备简单的应用程序,其目标是在屏幕上的任何位置发送“触摸”事件。我有一些解决方案,但是当“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;
        }

所以基本上重要的部分发生在“触摸”功能中。这段代码工作得非常好,除非我说它是在针对 .NET Framework 的 WPF 应用程序中使用的。当此解决方案与面向 .NET Core 3.1 的 WPF 应用程序一起使用时,一切正常。

我尝试使用一些属性,如“pointerFlags”、“orientation”、“pressure”等,但没有任何效果。我看不出如果我做错了什么,它看起来像是某种错误,导致“Touch”和针对 .NET Framework 的 WPF 应用程序无法正常工作。

任何建议高度赞赏。

标签: c#.netwpfautomationtouch

解决方案


推荐阅读