我对ISystemMediaTransportControlsInterop::GetForWindow方法很感兴趣。该文档已经过时了。但是我在文件夹 C:\ Program Files(x86)\ Windows Kits \ 10 \ Include \ 10.0.19041.0中找到文件 SystemMediaTransportControlsInterop.h 和 SystemMediaTransportControlsInterop.idl Windows SDK的\ um 。他们正在描述GetForWindow
方法。那么,如何获取ISystemMediaTransportControlsInterop
的实例并调用此方法?
WinRT仅包含方法SystemMediaTransportControls.GetForCurrentView,但我想从应用程序中获取其他程序的SystemMediaTransportControls
实例。
谢谢
答案 0 :(得分:0)
因此,我发现 WinRT 是基于 COM 技术的。我们可以从互操作接口获得ActivationFactory
来调用方法。
例如,在C#上:
[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);
但是问题是,如果我尝试其他窗口的 SMTC 实例,则会收到拒绝访问的异常。