我正在使用添加到RealTimeStylus插件中的IStylusSyncPlugin从触控笔获取 X、Y、压力和计时器滴答声。这工作正常,直到我收集此数据的窗口失去焦点。之后,即使焦点回到窗口,StylusSyncPlugin 也不会接收数据。有谁知道我能做些什么来解决这个问题?我发现,来自主窗口的触控笔事件(例如PreviewStylusMove)仍在触发,但来自这些事件的点不包含时间戳。一个简单的代码示例可能有助于重现此问题:
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 的Microsoft 文档时,我发现“当您创建 RealTimeStylus 对象时,您可以选择将其附加到窗口句柄或控件。将 RealTimeStylus 对象附加到窗口句柄需要额外的权限。更多有关这些权限的信息,请参阅StylusInput API 的部分信任注意事项。” “采用 handle 参数的 RealTimeStylus 需要 UIPermissionWindow.AllWindows 和 SecurityPermissionFlag.UnmanagedCode 权限,以及采用 attachControl 参数的构造函数所需的权限。” 有谁知道如何检查 Window 是否具有这些权限,以及如何跟踪它们以检查 Window 是否有时会在焦点丢失时丢失它们?
EDIT2:
我尝试通过添加[UIPermission(SecurityAction.Demand, Window =UIPermissionWindow.AllWindows)]
到主窗口类以及new UIPermission(UIPermissionWindow.AllWindows).Demand();
在主窗口构造函数中设置来设置 UIPermission,但它没有任何改变。
EDIT3: 我注意到的下一件事是,StylusInRange 和 StylusOutOfRange 事件每次都在工作,即使窗口没有焦点。