Visual c++ 使用DirectXTK在Windows应用商店应用程序(Metro)中保存屏幕截图 我正在研究一个C++ Windows存储DirectX应用程序,我试图经常将屏幕截图保存到磁盘。

Visual c++ 使用DirectXTK在Windows应用商店应用程序(Metro)中保存屏幕截图 我正在研究一个C++ Windows存储DirectX应用程序,我试图经常将屏幕截图保存到磁盘。,visual-c++,windows-store-apps,directx,file-permissions,windows-store,Visual C++,Windows Store Apps,Directx,File Permissions,Windows Store,我正在使用(DirectXTK)和函数SaveDDSTextureToFile,它返回一个HRESULT 问题是返回的HRESULT始终是: E_ACCESSDENIED常规访问被拒绝错误 我假设这是一些权限/功能(它是一个windows应用商店应用程序),但我找不到需要什么权限才能将文件保存到磁盘 DirectX工具包说它适用于Windows应用商店应用程序和桌面应用程序,但我也找不到他们的codeplex上的任何信息 有人知道我需要什么样的许可才能工作吗 谢谢您的时间。Windows应用商店

我正在使用(DirectXTK)和函数SaveDDSTextureToFile,它返回一个HRESULT

问题是返回的HRESULT始终是:

E_ACCESSDENIED常规访问被拒绝错误

我假设这是一些权限/功能(它是一个windows应用商店应用程序),但我找不到需要什么权限才能将文件保存到磁盘

DirectX工具包说它适用于Windows应用商店应用程序和桌面应用程序,但我也找不到他们的codeplex上的任何信息

有人知道我需要什么样的许可才能工作吗


谢谢您的时间。

Windows应用商店应用程序是沙盒应用程序,权限比桌面应用程序少,尤其是在文件访问方面。默认情况下,应用程序只具有写入的权限,而这不容易从shell访问。如果要保存到图片或文档库,则需要在包清单中指定此访问权限。此外,您还需要使用WinRT文件API来编写DDS文件。要执行此操作,请使用
savedds内存
,然后将生成的原始DDS数据写入
存储文件
。有关将此数据写入文件所涉及的WinRT API的更多信息,请查看。

我已经找到了一种方法。基本上正如MooseBoys所说,你不能保存到任何地方,因为应用程序是沙盒

但是,您可以保存到AppData中应用程序包的TempState文件夹中,这是我所需要的,因为我正在使用此功能进行调试

所以我所说的是:

DirectX::SaveWICTextureToFile(deviceContext, texture2D, GUID_ContainerFormatPng, L"C:\\Users\\USERNAME\\AppData\\Local\\Packages\\PACKAGENAME\\TempState\\test.png");

这非常有效。

您需要找出工具箱试图保存文件的位置。特定于包的应用程序本地目录是应用程序可以写入而无需请求权限的唯一位置。好的,这是有意义的。谢谢,如果它有效,我会报告:)嗯,我在DirectXTK中似乎找不到SaveDDSTextureToMemory(),只有SaveDDSTextureToFile()和SaveWictTextureToFile()。它在哪里?使用硬编码路径当然是个问题。您应该使用Windows::Storage::ApplicationData::Current->Local文件夹或Windows::Storage::ApplicationData::Current->Temporary文件夹作为基础文件夹。这在DirectX工具包中有介绍