使用DirectXTK在Windows应用商店应用(Metro)中保存屏幕截图

时间:2013-09-06 14:57:35

标签: visual-c++ windows-store-apps directx file-permissions windows-store

我正在开发一个C ++ Windows Store DirectX应用程序,并且我经常尝试将屏幕截图保存到磁盘。

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

问题是返回的HRESULT总是:

  

E_ACCESSDENIED一般访问被拒绝错误。

我认为这是一些权限/功能的东西(它是一个Windows商店应用程序),但我找不到我需要的权限,以便能够将文件保存到磁盘。

DirectX ToolKit表示它适用于Windows商店应用程序以及桌面应用程序,但我也找不到有关其codeplex的任何信息。

是否有人知道我需要获得许可才能使其工作?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

Windows应用商店应用程序是沙盒式的,并且权限少于桌面应用程序,尤其是在文件访问方面。默认情况下,应用只能访问local storage directory,但无法从shell轻松访问。如果要保存到图片或文档库,则需要在包清单中指定此访问权限。此外,您将需要使用WinRT文件API来编写DDS文件。为此,请使用SaveDDSTextureToMemory,然后将生成的原始DDS数据写入StorageFile。查看File access sample以获取有关将此数据作为文件编写所涉及的WinRT API的更多信息。

答案 1 :(得分:0)

我设法找到了办法。基本上MooseBoys说你无法保存到任何地方,因为应用程序是沙箱。

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

所以我称之为:

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

这很有效。