15

我想在我自己的应用程序中获取 Microsoft Groove 应用程序中当前播放曲目的曲目信息。我说的是 Groove APP,而不是 REST Api。

我的第一种方法是尝试Windows.Media.Playback.BackgroundMediaPlayer从我自己的进程(应用程序)中获取(现在已经过时的)信息。有关开发中心文档Windows.Media.Playback.BackgroundMediaPlayer中的更多信息

想法是从中获取信息,BackgroundMediaPlayer.Current但这仅在同一过程中有效。同样,无论如何,这已经过时了,现在 MS 建议使用Windows.Media.Playback.MediaPlayer该类,但这也只能在使用 MediaPlayer 的同一进程中访问。

第二种方法是从System Media Transport Controls获取信息。

对于那些不熟悉 SMTC 的人,这就是我所说的(例如,当您从键盘跳过/播放/暂停时的小弹出窗口):

在此处输入图像描述

上面链接的关于 SMTC 的文章展示了如何在您的应用程序中使用这些控件,我想做的事情基本上完全相反。

有没有人有其他你认为可行的方法?

编辑

所以我发现使用本机ISystemMediaTransportControlsInterop界面可能是可能的:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn892315(v=vs.85).aspx

更准确的ISystemMediaTransportControlsInterop::GetForWindow方法:

https://msdn.microsoft.com/en-us/library/windows/desktop/dn892316(v=vs.85).aspx

但我不知道如何调用这个方法,使用什么库(dll)所以我可以(也许)在我的 C# 应用程序中调用它。

文档说这包含在 Windows 10 SDK 中,但我不知道在哪里。

也许我完全错了,也许我不能在 C# 中使用它(因为它是一个 C++ 接口)。但我的想法是这必须编译成一个库,我可以通过使用 pInvoke 来使用它。

如果有人可以向我解释这一点,将不胜感激。

4

1 回答 1

2

https://docs.microsoft.com/en-us/uwp/api/Windows.Media.SystemMediaTransportControls

SystemMediaTransportControls _control = SystemMediaTransportControls.GetForCurrentView();

Windows.Foundation.UniversalApiContract.winmd 是您获得访问 SMTC 类所需的合同。

参考这个,你应该能够获得控制权。

<Reference Include="Windows.Foundation.UniversalApiContract"> <HintPath>C:\Program Files (x86)\Windows Kits\10\References\Windows.Foundation.UniversalApiContract\3‌​.0.0.0\Windows.Found‌​ation.UniversalApiCo‌​ntract.winmd</HintPa‌​th> </Reference>

将此添加到 Visual Studio 中的项目文件中。

我希望这是您正在寻找的,无论哪种方式,这将允许您访问“Windows.Media”命名空间。

于 2017-10-10T05:19:31.530 回答