wpf 在WinUI3和C#中初始化MPV.Net时无法提供控制句柄

rdrgkggo  于 2023-08-07  发布在  C#
关注(0)|答案(1)|浏览(127)

我使用的是MPV.Net库,如下所示,它要求我提供一个控件句柄:MpvPlayer(IntPtr hwnd,string libMpvPath)
但是,我使用的是微软的WinUI3技术,类似于WPF,我无法获得控制句柄。我想使用WinForm控件,但我不能引用它,我不知道该怎么办。
下面是我在HomePage中编写的静态MPVPlayer对象MP的初始化:

using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Mpv.NET.Player;
using PigeonPlayer.ViewModels;

namespace PigeonPlayer.Views;

public sealed partial class HomePage : Page
{
    public HomeViewModel ViewModel
    {
        get;
    }

    public static MpvPlayer mp;

    public HomePage()
    {
        initMPV();
        ViewModel = App.GetService<HomeViewModel>();
        InitializeComponent();
    }

    async void initMPV()
    {
        StackPanel sp = new StackPanel();
        string currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
        string dllPath = Path.Combine(currentDirectory, "mpv-1.dll");
        mp = new MpvPlayer( dllPath);
    }
}

字符串
我不知道如何修改它。我使用了一些WinUI.Interop,但它只能获取父窗口句柄。
我尝试使用System.Windows.FormWindowsFormsHost来像在WPF中一样使用Winforms控件,但失败了。我无法在WinUI项目中使用Winform控件。

bkhjykvo

bkhjykvo1#

我建议你可以参考thread:How to get a control's handle in WinUI3 in C++?
XAML是一个无窗口的框架。控件没有窗口。屏幕上的所有XAML控件最终都由属于父窗口的单个HWND支持。
您只需检索窗口的窗口句柄。您可以尝试在WinRT.Interop.WindowNative C#互操作类上调用GetWindowHandle method

// MainWindow.xaml.cs
private async void myButton_Click(object sender, RoutedEventArgs e)
{
    // Retrieve the window handle (HWND) of the current WinUI 3 window.
    var hWnd = WinRT.Interop.WindowNative.GetWindowHandle(this);
}

字符串
更多细节建议参考文档:Retrieve a window handle

相关问题