如何在WPF应用程序中使用SystemMediaTransportControls?

vxbzzdmp  于 2023-05-19  发布在  其他
关注(0)|答案(2)|浏览(162)

有没有办法在WPF中创建SystemMediaTransportControls-object?
我遵循this指南从我的WPF应用程序访问Windows 10 API。我可以调用类,但不能创建对象。在UWP-App中,您可以像这样创建它:

SystemMediaTransportControls smtp = SystemMediaTransportControls.GetForCurrentView();

但是通过在WPF中调用这个方法,我在这一行得到了一个"Invalid window handle"异常。

public partial class MainWindow : Window
{
    SystemMediaTransportControls smtp;

    public MainWindow()
    {
        InitializeComponent();
        //SMTP Einrichten
        smtp = SystemMediaTransportControls.GetForCurrentView();
    }

[...]
}

显然,GetForCurrentView()在WPF中不起作用,但应该使用什么?

z9smfwbn

z9smfwbn1#

您应该安装Microsoft.Windows.SDK.Contracts NuGet包。然后,您将能够与WPF项目中的系统媒体传输控件进行交互。
下面是一个打印一些媒体信息,然后尝试暂停媒体的示例:

var sessionManager = await GlobalSystemMediaTransportControlsSessionManager.RequestAsync();
var mediaProperties = await sessionManager.GetCurrentSession().TryGetMediaPropertiesAsync();

Console.WriteLine("{0} - {1}", mediaProperties?.Artist, mediaProperties?.Title);
Console.WriteLine($"Status: {sessionManager.GetCurrentSession().GetPlaybackInfo().PlaybackStatus}");

await sessionManager.GetCurrentSession().TryPauseAsync();
jvidinwx

jvidinwx2#

桌面应用程序不支持SystemMediaTransportControls。它只能在UWP应用程序中使用。
参见UWP APIs callable from a classic desktop app,它说:

如果DualApiPartition属性未列出

在这种情况下,不允许从经典桌面应用调用API。按钮就是一个例子。
SystemMediaTransportControls没有DualApiPartition属性。

    • 如何知道哪些API可用?**您链接的指南部分引用了打包的桌面应用(Desktop Bridge)可用的UWP API列表,并且这也没有将SystemMediatTransportControls列为可用。

相关问题