Uwp 获取其他窗口的SystemMediaTransportControl

Uwp 获取其他窗口的SystemMediaTransportControl,uwp,com,windows-10,windows-runtime,c++-winrt,Uwp,Com,Windows 10,Windows Runtime,C++ Winrt,我对方法很感兴趣。文档已经过时了。但我在Windows SDK的文件夹C:\Program files(x86)\Windows Kits\10\Include\10.0.19041.0\um中找到了文件SystemMediaTransportControlsInterop.h和SystemMediaTransportControlsInterop.idl。他们正在描述GetForWindow方法。那么,如何获取ISystemMediaTransportControlsInterop的实例并调用

我对方法很感兴趣。文档已经过时了。但我在Windows SDK的文件夹C:\Program files(x86)\Windows Kits\10\Include\10.0.19041.0\um中找到了文件SystemMediaTransportControlsInterop.h和SystemMediaTransportControlsInterop.idl。他们正在描述
GetForWindow
方法。那么,如何获取
ISystemMediaTransportControlsInterop
的实例并调用此方法

WinRT只包含方法,但我想从我的应用程序中获取其他程序的
SystemMediaTransportControls
实例

谢谢

因此,我发现WinRT是基于COM技术的。我们可以从互操作接口获取
ActivationFactory
来调用方法。 例如,在C#上:

但问题是,如果我尝试其他窗口的SMTC实例,我会收到拒绝访问异常。

因此,我发现WinRT是基于COM技术的。我们可以从互操作接口获取
ActivationFactory
来调用方法。 例如,在C#上:


但问题是,如果我尝试其他窗口的SMTC实例,我会收到拒绝访问异常。

文档没有过时。内容没有定期更新。这并不意味着文件不准确。我不确定现在的问题是什么。只有拥有该窗口的进程才能获取/创建其SMTC。您不打算操纵属于其他窗口的SMTC。GetForCurrentView暗示了这一点,因为当前视图被定义为与当前线程关联的视图,它自然也是调用过程的一部分。文档并没有过时。内容没有定期更新。这并不意味着文件不准确。我不确定现在的问题是什么。只有拥有该窗口的进程才能获取/创建其SMTC。您不打算操纵属于其他窗口的SMTC。GetForCurrentView暗示了这一点,因为当前视图被定义为与当前线程相关联的视图,这自然也是调用过程的一部分。我正在寻找一种使用此API的解决方案。你能帮我提供一些关于你的代码示例的详细信息吗?我在哪里可以找到缺少的类型?您需要什么类型?我的场景是通过蓝牙耳机控件(与Firefox/YouTube、播放/暂停、上一个/下一个、音量上下)控制我的媒体播放器(自定义应用程序、Windows窗体)。@ygoe我想这就是您需要的。它允许控制全球媒体。我正在寻找一个解决方案来使用这个API。你能帮我提供一些关于你的代码示例的详细信息吗?我在哪里可以找到缺少的类型?您需要什么类型?我的场景是通过蓝牙耳机控件(与Firefox/YouTube、播放/暂停、上一个/下一个、音量上下)控制我的媒体播放器(自定义应用程序、Windows窗体)。@ygoe我想这就是您需要的。它允许控制全球媒体。
[Guid("ddb0472d-c911-4a1f-86d9-dc3d71a95f5a")]
[InterfaceType(ComInterfaceType.InterfaceIsIInspectable)]
public interface ISystemMediaTransportControlsInterop
{
    SystemMediaTransportControls GetForWindow(IntPtr Window, [In] ref Guid riid);
}

var smtcInterop = (ISystemMediaTransportControlsInterop)WindowsRuntimeMarshal.GetActivationFactory(typeof(SystemMediaTransportControls));
var guid = typeof(SystemMediaTransportControls).GUID;
var smtc = smtcInterop.GetForWindow(hwnd, ref guid);