C# IStylusSyncPlugin在windows失去焦点后未接收数据

C# IStylusSyncPlugin在windows失去焦点后未接收数据,c#,wpf,focus,tablet-pc,stylus-pen,C#,Wpf,Focus,Tablet Pc,Stylus Pen,我使用添加到插件,以获得X,Y,压力和定时器滴答从触笔。在我收集这些数据的窗口失去焦点之前,这一切都很正常。之后,即使焦点回到窗口,StylusSyncPlugin也不会接收数据。有人知道我能做些什么来解决这个问题吗?我发现,来自主窗口(例如)的触控笔事件仍在触发,但这些事件的点不包含时间戳。 有助于再现此问题的简单代码示例: public partial class MainWindow : Window { public MainWindow() {

我使用添加到插件,以获得X,Y,压力和定时器滴答从触笔。在我收集这些数据的窗口失去焦点之前,这一切都很正常。之后,即使焦点回到窗口,StylusSyncPlugin也不会接收数据。有人知道我能做些什么来解决这个问题吗?我发现,来自主窗口(例如)的触控笔事件仍在触发,但这些事件的点不包含时间戳。 有助于再现此问题的简单代码示例:

 public partial class MainWindow : Window
 {
     public MainWindow()
     {
         InitializeComponent();
         this.Loaded += new RoutedEventHandler(MainWindow_Loaded);
     }
     void MainWindow_Loaded(object sender, RoutedEventArgs e)
     {
         RealTimeStylus rts = new RealTimeStylus(new WindowInteropHelper(this).Handle);
         rts.AsyncPluginCollection.Add(new SyncStylusPlugin());
         rts.Enabled = true;
     }
     class SyncStylusPlugin : IStylusSyncPlugin
     {
         public DataInterestMask DataInterest => DataInterestMask.Packets;
         public void Packets(RealTimeStylus sender, PacketsData data)
         {
             Console.WriteLine("Packets arrived");
         }
         public void StylusDown(RealTimeStylus sender, StylusDownData data) { }
         public void StylusUp(RealTimeStylus sender, StylusUpData data) { }
         public void CustomStylusDataAdded(RealTimeStylus sender, CustomStylusData data) { }
         public void Error(RealTimeStylus sender, ErrorData data) { }
         public void InAirPackets(RealTimeStylus sender, InAirPacketsData data) { }
         public void RealTimeStylusDisabled(RealTimeStylus sender, RealTimeStylusDisabledData data) { }
         public void RealTimeStylusEnabled(RealTimeStylus sender, RealTimeStylusEnabledData data) { }
         public void StylusButtonDown(RealTimeStylus sender, StylusButtonDownData data) { }
         public void StylusButtonUp(RealTimeStylus sender, StylusButtonUpData data) { }
         public void StylusInRange(RealTimeStylus sender, StylusInRangeData data) { }
         public void StylusOutOfRange(RealTimeStylus sender, StylusOutOfRangeData data) { }
         public void SystemGesture(RealTimeStylus sender, SystemGestureData data) { }
         public void TabletAdded(RealTimeStylus sender, TabletAddedData data) { }
         public void TabletRemoved(RealTimeStylus sender, TabletRemovedData data) { }
     }
 }
我发现,点击任务栏上的应用程序图标可以使RealTimeStylus再次工作。当点击这个图标时,有没有任何方法可以像鼠标一样触发相同的事件?应该触发哪些事件

编辑:

在阅读有关RealTimeStylus的文章时,我发现“创建RealTimeStylus对象时,可以选择将其附加到窗口句柄或控件。将RealTimeStylus对象附加到窗口句柄需要附加权限。有关这些权限的详细信息,请参阅。”接受handle参数的RealTimeStylus需要UIPermissionWindow.AllWindows和SecurityPermissionFlag.UnmanagedCode权限,以及接受attachedControl参数的构造函数所需的权限。“是否有人知道如何检查Windows是否具有这些权限,以及如何跟踪这些权限,以检查Windows是否有时会在焦点丢失时丢失这些权限?”

EDIT2: 我试图通过将
[UIPermission(SecurityAction.Demand,Window=UIPermissionWindow.AllWindows)]
添加到主窗口类并通过设置
新UIPermission(UIPermissionWindow.AllWindows.Demand())来设置UIPermission在主窗口构造函数中,但它不会更改任何内容

EDIT3:
我注意到的下一件事是,StylusInRange和StylusOutOfRange事件每次都在工作,即使窗口没有焦点。

这与您的问题类似吗?不,不一样。我的问题是,RealTimeStylus有时在窗口失去焦点(并在一段时间后重新获得焦点)后不收集数据,因此您不太可能正确识别原因。rts变量必须是窗口类的一个字段,这样RCW就不能过早地进行垃圾收集。不幸的是,这不是由GC引起的,将rst设为窗口类的字段不会改变任何事情。我还发现,如果我多次更改窗口的焦点,rst将再次开始收集数据(ofc。在下一次焦点更改后,它将停止…)。