如何将Cortana命令连接到自定义脚本?
nlp
5
0

提出这个问题可能还为时过早,但是我正在运行Windows 10 Technical Preview Build10122。我想将Cortana设置为具有自定义命令。这是她的工作方式:

Hey Cortana, <she'll listen and process this command>

微软将处理该命令,如果没有任何用处,她将在必应上搜索输入。但是,我希望能够说些类似的话

Hey Cortana, I'm going to bed now

I'm going to bed now的输入触发运行批处理脚本,VBScript,命令或任何某种自定义响应,基本上可以完成以下操作。

C:\> shutdown -s

有没有办法为Cortana设置预定义的自定义命令?

更新:

我创造了这个基本的YouTube教程这个更高级的一个具有相应的GitHub库基于talkitbr的优秀和非常有益的回答如下

最初,他的答案超出了我的理解范围,因此我决定为像我这样的未来用户更详细地细分它。

参考资料:
Stack Overflow
收藏
评论
共 1 个回答
高赞 时间 活跃

您可以创建命令供Cortana收听。这些命令需要在称为语音命令定义或VCD的XML文件中进行描述。

这是一个例子:

<?xml version="1.0" encoding="utf-8" ?>
<VoiceCommands xmlns="http://schemas.microsoft.com/voicecommands/1.2">
    <CommandSet xml:lang="en-us" Name="HomeControlCommandSet_en-us">
        <CommandPrefix>HomeControl</CommandPrefix>
        <Example>Control alarm, temperature, light and others</Example>

        <Command Name="Activate_Alarm">
            <Example>Activate alarm</Example>
            <ListenFor>[Would] [you] [please] activate [the] alarm [please]</ListenFor>
            <ListenFor RequireAppName="BeforeOrAfterPhrase">Activate alarm</ListenFor>
            <ListenFor RequireAppName="ExplicitlySpecified">Activate {builtin:AppName} alarm</ListenFor>
            <Feedback>Activating alarm</Feedback>
            <Navigate />
        </Command>
        ...
    </CommandSet>
</VoiceCommands>

创建此定义后,您需要在应用启动时进行注册:

protected async override void OnLaunched(LaunchActivatedEventArgs e)
{
    ...
    // Install the VCD
    try
    {
        StorageFile vcdStorageFile = await Package.Current.InstalledLocation.GetFileAsync(@"HomeControlCommands.xml");
        await VoiceCommandDefinitionManager.InstallCommandDefinitionsFromStorageFileAsync(vcdStorageFile);
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("There was an error registering the Voice Command Definitions", ex);
    }
}

然后重写App.OnActivated方法以在事件触发时进行处理:

protected override void OnActivated(IActivatedEventArgs e)
{
    // Handle when app is launched by Cortana
    if (e.Kind == ActivationKind.VoiceCommand)
    {
        VoiceCommandActivatedEventArgs commandArgs = e as VoiceCommandActivatedEventArgs;
        SpeechRecognitionResult speechRecognitionResult = commandArgs.Result;

        string voiceCommandName = speechRecognitionResult.RulePath[0];
        string textSpoken = speechRecognitionResult.Text;
        IReadOnlyList<string> recognizedVoiceCommandPhrases;

        System.Diagnostics.Debug.WriteLine("voiceCommandName: " + voiceCommandName);
        System.Diagnostics.Debug.WriteLine("textSpoken: " + textSpoken);

        switch (voiceCommandName)
        {
            case "Activate_Alarm":
                System.Diagnostics.Debug.WriteLine("Activate_Alarm command");
                break;

本教程显示了完整的代码

完成所有这些操作后,您可以使用ProcessStartInfoSystem.Diagnostics.Process.Start调用批处理脚本。

另外,如果您有兴趣通过Cortana窗口回复用户,请在后台查看有关Cortana的帖子

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号