WinRT C++ UWP“选择器”

问题描述 投票:0回答:1

从架构上来说,我通常对更广泛的 Windows C++ 生态系统一无所知。从文档角度来看,文档偏向 c#,所以有时我很难弥合差距。

我想使用winrt图形捕获。 OBS 有一个很好的实现,但感觉用 cmake 来管理依赖关系很困难,而且他们在一个关键元素上迷失了我。

图形捕捉项目。他们以某种方式将其输入,但我找不到它。但这就像 c 导出一样。我可以看到它,但很难跟上。

这是另一个例子,它曾经很好用过一段时间,但由于某种原因我现在无法在 Windows 11 上编译它。我已经使用并修改了它,但我想要一个新的开始。他拥有各种他依赖的库,尽管他自己创建了这些库,但编译器突然抱怨 co_await。我已经尝试过我知道可以工作的过去的 git 哈希值等。我认为有一个标头已从某些核心标头中删除,但我不知道如何找到它。

我从未见过可以仅返回图形捕获项的示例。没有选择器。我希望我能直接说“监视器 0”。

所以没关系,就是很痛苦,我改用UWP了。好吧,这很糟糕,因为它都是 C# 齿轮文档,并且默认应用程序会将您带入一个带有简单按钮的应用程序。现在我不想要或不需要按钮。 WinRT 捕获是最流畅、最高效的,作为一个在更广泛的生态系统中挣扎的人,我只是想让自己更轻松。

我无法调用 winrt::GraphicsCapturePicker();因为我认为我需要一个调度队列?要么是“我在 ui 线程上”,但我不知道如果这是正确的,我可能会混淆另一个框架。它失败并显示以下内容:

    inline void check_sta_blocking_wait() noexcept
    {
        // Note: A blocking wait on the UI thread for an asynchronous operation can cause a deadlock.
        // See https://docs.microsoft.com/windows/uwp/cpp-and-winrt-apis/concurrency#block-the-calling-thread
        WINRT_ASSERT(!is_sta_thread());
    }

对于我(也许只有我)来说,没有足够的例子来将这些概念串联起来。文件选择器和排序的 C# 示例。我认为 c++ 中的 winui3 有一个,但直接不起作用。我可以创建窗口,获取句柄,但永远无法打开选择器,退出 0。

TLDR 是我需要一个示例,说明如何从 uwp c++ 应用程序或桌面应用程序,甚至最喜欢的控制台打开选择器,最好是 capturePicker,但这感觉不可能。

c++ uwp c++-winrt windows-graphics-capture
1个回答
0
投票

我需要一个如何从 uwp c++ 应用程序或桌面应用程序打开选择器(最好是 capturePicker)的示例

我制作了一个非常简单的 C++/WinRT UWP 应用程序,它展示了如何打开用于屏幕捕获的 GraphicsCapturePicker 并获取您想要的 GraphicsCaptureItem

这是一个空白的 C++/WinRT UWP 项目。大多数代码是在您选择模板时自动生成的。这是代码。

MainPage.Xaml

 <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
 <Button x:Name="myButton" Click="ClickHandler">Click Me</Button>
</StackPanel>

主页.h

    struct MainPage : MainPageT<MainPage>
{
    MainPage()
    {

    }

    int32_t MyProperty();
    void MyProperty(int32_t value);

    fire_and_forget ClickHandler(Windows::Foundation::IInspectable const& sender, Windows::UI::Xaml::RoutedEventArgs const& args);
};

主页.cpp

fire_and_forget MainPage::ClickHandler(IInspectable const&, RoutedEventArgs const&)
{
myButton().Content(box_value(L"Clicked"));

Windows::Graphics::Capture::GraphicsCapturePicker picker;

GraphicsCaptureItem item = co_await picker.PickSingleItemAsync();

}

请记住在清单文件中启用图形捕获功能。

更多关于屏幕截图的信息,请参考此文档 -屏幕截图

© www.soinside.com 2019 - 2024. All rights reserved.