Windows运行时(WinRT)是一种Microsoft平台体系结构,允许应用程序在沙盒环境中运行,从而暴露“Windows现代风格”UI / UX。不要与用于ARM设备的Windows 8版本Windows RT相混淆;看到windows-rt。
我正在为 Delphi 创建一个库,以便使用 Winapi.UI.Notifications 的接口更轻松地实现 Windows 11 toast 通知。 我想使用以下方式将自定义通知发布到操作中心...
Windows 应用商店有类似控制台的 API 吗? [已关闭]
我的设计可以从控制台中受益匪浅。通过控制台,我的意思是 用户输入文本 我接受输入 我在下一行返回输出 用户在代表行后输入更多文本...
我想更改标题栏颜色,如主题颜色。 我得到主题颜色,但我不知道如何更改颜色。我尝试 #如果是Windows var uiSettings = new Windows.UI.ViewManagement.UISettings(); var c...
我们正在开发一个应用程序,需要知道它正在运行的设备的序列号。该应用程序适用于保险公司,用户可以直接为设备获得保险...
在 WPF .NET Core 8.0 类型的项目中使用使用 Store API 的 .NET Standard 2.0 库时出现问题
各位 MSFT 开发人员大家好, 为了您的方便,我创建了一个示例项目,可在 https://github.com/JiyaDesai-FandCo/WpfAppdotnet8 我们在库中有现有代码(类型为 .NET Standa...
我正在尝试从 WinUI3 应用程序中的网络摄像头捕获图像。 经过一番尝试和错误后,我终于成功地通过 MediaFrameReader 做到了这一点。 现在我已经将捕获的图像作为 SoftwareBitmap 并作为我...
在 WPF .NET 6 中使用 C++/WinRT 组件(但实际上是任何 WinRT 组件)
我想编写一个 WPF 应用程序,但尽可能在现代框架上构建它,包括 .NET 6 甚至更高版本。 我有一些我想调用的 C++ 代码,我喜欢
我按照 Microsoft 文档创建了在 dotnet8 上运行的 WinRT IBackgroundTask。现在我想将它与我的应用程序集成,该应用程序部署为独立的并且不需要
我想在 Windows 计算机的右下角显示文本(任务栏被隐藏)。我希望文本可见但没有背景。 执行此操作的正确 Windows API 是什么...
如何在 Rust/WinRT 中获取 IDirect3DDevice?
我想在 winrt-rs 项目中捕获屏幕,因此请按照以下说明进行操作。 但是,我不知道如何获取 Direct3D11CaptureFramePool.Create() 的第一个参数 IDirect3DDevice。 为了...
可以将 C#/WinRT 与较新的 .NET 版本(例如 NET 8)一起使用吗?
刚刚偶然发现了 C#/WinRT,其中指出 虽然我们的重点是支持 .NET 5,但我们希望生成兼容 .NET Standard 2.0 的投影。 NET 5 已经是
将本机 C++ 静态库添加到 Windows 运行时组件 (UWP) 时出现链接器错误
将本机 C++ 库添加到 Windows 运行时组件 (C++ Winrt) 项目会引发错误(链接:致命错误 LNK1104:无法打开文件“comsuppw.lib”)。 我已经关注了 https://learn.microsoft.com/...
我想编写一个 C++ 程序,该程序将被编译成 dll 并注入到 C++ uwp 应用程序中。 该程序应该修补特定地址处的字节。 例如我们要修补地址 0x1234567...
IAsyncOperation 接口公开一个 Completed 属性,用户可以将操作完成时调用的方法附加到该属性。 MS 在网上有示例代码,说明...
我想在 XAML Metro 应用程序中模拟模式对话框。 因此,我打算在所有控件上设置 .IsEnabled = false,除了作为模式对话框的控件之外。 显然 IsEnabled 不在网格中...
如何从Python中的winrt获得通知监听器所需的权限?以下代码立即返回“denied”,而不显示任何类型的窗口提示:
我有一个打开网页的WebView2。该网页可能随时更改并会自动更新。 我需要监视此页面以捕获它更新的时刻并执行给定的 m...
在提到我关于 TreeView 的问题时,建议我使用数据绑定来填充 TreView 的项目。 我在 Desktop C++ VS 2022 项目中创建了一个新的黑色应用程序、打包的 WinUI3。 这...
如何在 C++/WinRT (WinUI3) 中将图像从内存读取到 ImageSource?
[1] 我想在 XAML 中显示 Image 控件的图像,但该图像来自字节数组。 我应该怎么办?图像格式可以是JPG、BMP或PNG之一。 [1] 我想在 XAML 中显示 Image 控件的图像,但该图像来自字节数组。 我该怎么办?图像格式可以是 JPG、BMP 或 PNG 之一。 <Image x:Name="img"/> void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&) { unsigned long long size; // iamge data size const unsigned char* buf; // image data img().Source(???); // what should I do? } [2] 我尝试了InMemoryRandomAccessStream,但没有成功。 我知道在C#中使用MemoryStream很方便,但是如何在C++中实现它? 另一个问题是这个方法是否也适用于JPG和PNG格式的图像? void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&) { unsigned long long size; // iamge data size const unsigned char* buf; // image data winrt::Microsoft::UI::Xaml::Media::Imaging::BitmapImage bmp; winrt::Windows::Storage::Streams::InMemoryRandomAccessStream stream; // How to read data from stream? bmp.SetSource(stream); img().Source(bmp); } [3] 现在功能已经实现了,但是还有两个问题 IAsyncAction MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&) { unsigned long long size; // iamge data size const unsigned char* buf; // image data winrt::Microsoft::UI::Xaml::Media::Imaging::BitmapImage bmp; winrt::Windows::Storage::Streams::InMemoryRandomAccessStream stream; winrt::Windows::Storage::Streams::DataWriter dw(st.GetOutputStreamAt(0ULL)); dw.WriteBytes({ buf, size }); // This is very inefficient! co_await dw.StoreAsync(); dw.Close(); bmp.SetSource(stream); img().Source(bmp); stream.Close(); } 首先,我发现DataWriter::WriteBytes()确实是在复制数据。但我认为ImageSource只需要从我的buf中读取即可,不需要在读取之前将整个图像完全复制到流中。也许是类似MemoryView的东西,我这样想是不是错了? 其次,DataWriter和InMemoryRandomAccessStream的Close()应该在哪里调用? BitmapImage需要释放内存吗?这里有一个异步函数,我不知道应该写在哪里 [4] 根据IInspectable,我尝试了SHCreatMemStream并搜索了大量信息以提出另一个解决方案。目前的问题是,与方法[3]同样可行,但仍然会出现内存分配问题。 #include "Shlwapi.h" #include "shcore.h" #pragma comment(lib, "shlwapi.lib") void MainWindow::myButton_Click(IInspectable const&, RoutedEventArgs const&) { unsigned long long size; // iamge data size const unsigned char* buf; // image data winrt::Microsoft::UI::Xaml::Media::Imaging::BitmapImage bmp; IStream* stream{ SHCreateMemStream(buf, size) }; // Copying takes a lot of time static const GUID guidIRandomAccessStream = { 0x905a0fe1, 0xbc53, 0x11df, { 0x8c, 0x49, 0x00, 0x1e, 0x4f, 0xc6, 0x86, 0xda } }; winrt::Windows::Storage::Streams::IRandomAccessStream pRas{ }; CreateRandomAccessStreamOverStream(stream, BSOS_OPTIONS::BSOS_DEFAULT, guidIRandomAccessStream, (void**)&pRas); bmp.SetSource(stream); img().Source(bmp); } 通过性能测试,发现CreateRandomAccessStreamOverStream的时间是一致的,但是SHCreateMemStream消耗的时间与图像大小成正比。可以得出,SHCreateMemStream中创建流的过程也涉及到内存的复制。 我对Windows编程中的Stream不是特别熟悉。创建流的过程一定会涉及到内存复制吗?从内存加载图像可以避免额外的开销吗?还有没有类似MemoryStreamView的结构来替代吗? 还有一个问题,我知道新的图像肯定需要内存存储。 BitmapImage设置Stream为Source会接管Stream占用的内存吗? Image控件设置BitmapImage作为Source会接管BitmapImage占用的内存吗? 如果是这样的话,我可以接受Stream分配新的内存,否则仍然是一个效率问题。 谢谢!!!!!!! 使用Stream已经彻底解决了这个问题。如前四期所述。 至于附加问题: ★1 使用 CreatStreamOnHGlobal 而不是 SHCreatMemStream。 因为SHCreatMemStream在调用过程中会对传入的内存块参数进行另一次内存复制。 CreatStreamOnHGlobal 创建流后不执行内存复制。您可以先通过GlobalAlloc分配内存,写入所需的图像数据,然后调用CreatStreamOnHGlobal,无需任何时间开销。另外,可以将CreatStreamOnHGlobal的第二个参数设置为true,自动释放GlobalAlloc分配的内存。 通过进程内存监控,我发现对于同一个程序,使用CreatStreamOnHGlobal的速度是SHCreatMemStream的两倍,并且不会导致内存泄漏。 ★2 创建的Stream需要调用Release方法减少一个引用。 IRandomAccessStream作为局部变量,会自动析构,无需主动释放。 并且BitmapImage还管理一部分引用,这些引用在离开作用域后被释放。 通过测试COM对象上Release方法的返回值,发现整个程序结束后引用计数又回到了0
我有这个代码: if (MyImage.Source == "ms-appx:///Assets/myimage.png") { //做一点事 } 但我收到这个错误: 无法将类型“string”隐式转换为“Windows.UI.Xaml.Media.ImageSource...