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

这可能有点早,问这个,但我正在运行Windows 10技术预览版10122.我想build立Cortana有自定义命令。 以下是她的工作方式:

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

微软会处理这个命令,如果没有任何东西的话,她只会search关于bing的input。 不过,我希望能够说一些例如

 Hey Cortana, I'm going to bed now 

I'm going to bed now的input触发器运行一个批处理脚本,一个VBScript,一个命令,或者任何一些自定义的响应,基本上做了以下几点。

 C:\> shutdown -s 

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

更新:

我创build了这个基本的YouTube教程这个更高级的 教程是基于talkitbr的优秀和非常有用的答案下面的相应的GitHub回购

起初他的回答超出了我的理解,所以我决定把它分解得更细一些,以便像我这样的未来用户。

您可以为Cortana创build侦听命令。 这些命令需要在称为语音命令定义或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> 

创build此定义后,您需要在App Startup上注册它:

 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的文章 。

你可以做的是写一个.bat文件,并将文件的快捷方式添加到文件夹:C:\ ProgramData \ Microsoft \ Windows \ Start Menu \ Programs你可以命名任何你想要的快捷方式,并通过说:“”嘿Cortana打开/启动[快捷方式名称]“。 确保Cortana只听你说没有被“恶作剧”。