【问题标题】:Using Windows 10 APIs (UWP) in Desktop app (WPF)在桌面应用程序 (WPF) 中使用 Windows 10 API (UWP)
【发布时间】:2018-05-20 13:40:05
【问题描述】:

我已尝试按照本文 (https://blogs.windows.com/buildingapps/2017/01/25/calling-windows-10-apis-desktop-application/#PdHk3f4QeTSsSvWy.97) 中的说明使用 Geolocator 类确定位置。当我添加对的引用时它工作正常 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\10.0.17134.0\Windows.winmd 代替 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd。 但是当我在以下代码中使用 GetFileAsync 方法时出现异常

    static async void LoadVoiceCommands()
    {
        try
        {
            StorageFile storageFile = await Package.Current.InstalledLocation.GetFileAsync("CustomVoiceCommandDefinitions.xml");
            await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(storageFile);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

异常说进程没有包标识。 (HRESULT 异常:0x80073D54)

我在InitializeComponent

之后调用MainWindow构造函数中的方法LoadVoiceCommands

当我添加参考 C:\Program Files (x86)\Windows Kits\10\UnionMetadata\Windows.winmd 而不是 C:\Program Files (x86)\Windows Kits\ 10\UnionMetadata\10.0.17134.0\Windows.winmd 并使用如下命名空间:

using Windows.ApplicationModel; using Windows.Storage; using Windows.Devices.Geolocation;

有一个错误CS0731 程序集'Windows'中的类型的类型转发器导致循环

换行

await locator.GetGeopositionAsync();

await Package.Current.InstalledLocation.GetFileAsync("CustomVoiceCommandDefinitions.xml");

关于如何解决这个问题的任何想法? 我在谷歌找不到解决方案

【问题讨论】:

  • @HansPassant 当然是经典应用程序中提供的 Windows.Media.SpeechRecognition。我自己测试过。它适用于 Windows 10,但不适用于 Windows 8

标签: c# wpf windows api


【解决方案1】:

某些 WinRT API:s 要求您的应用在应用容器的上下文中运行。

这意味着您必须转换您的应用才能使用这些。为此,您可以使用Desktop Bridge 为您的 WPF 桌面应用程序创建一个 Windows 应用程序包。

该包为您的应用提供一个身份,然后使用该身份可以访问特定的 WinRT API。

【讨论】:

  • 我的目标是在经典应用中使用 Windows 10 的 API。我不需要 Windows 应用程序。在这种情况下,我想在 WPF 中使用 Windows.Media 的语音识别。我已经可以在我的 WPF 应用程序中使用听写功能。但是,我还想使用语音命令定义 (vcd),因为它通常用于我的 WPF 应用程序中的 cortana。
  • Microsoft 文档页面显示 Package.Current 仅在 UWP 中受支持,并返回 Windows 应用程序的包。这是我的代码中出现异常的原因。对于经典应用,请使用 Windows.Management.Deployment.PackageManager。但是,我不知道如何在此使用语音命令加载我的 xml 文件
  • 您的问题是“我已经尝试过...”和“例外情况”。你的最新评论说的完全不同。
  • 我的目标是在 WPF 中使用 Windows.Media 的语音识别。为此,我尝试从 xml 文件中读取预定义的语音命令。根据今天的研究,我发现我无法在经典应用程序中使用 Package.Current。现在我正在寻找另一种方法来解决这个问题。
  • 建议使用桌面网桥。然后你可以使用 Package.Current。
猜你喜欢
  • 2018-10-27
  • 2017-02-06
  • 2018-11-15
  • 2014-11-29
  • 2017-01-12
  • 2015-04-20
  • 2021-03-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多