Comment connecter les commandes Cortana aux scripts personnalisés?

c'est peut-être un peu tôt pour poser cette question, mais je lance Windows 10 Technical Preview Build 10122. J'aimerais configurer Cortana d'avoir des commandes personnalisées. Voici comment elle fonctionne:

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

Microsoft va traiter la commande et s'il n'y a rien pour elle, elle va juste rechercher les entrées sur bing. Cependant, j'aimerais pouvoir dire quelque chose comme, par exemple

Hey Cortana, I'm going to bed now

Et recevoir les commentaires I'm going to bed now trigger exécute un script de traitement par lots, un VBScript, une commande, ou toute sorte de réponse personnalisée qui fait essentiellement ce qui suit.

C:> shutdown -s

Existe-t-il un moyen de configurer des commandes personnalisées prédéfinies pour Cortana?

mise à Jour:

j'ai créé ce tutoriel de base sur YouTube et ce plus avancé avec une dépôt GitHub basé sur la réponse excellente et très utile de talkitbr en dessous de.

au début, sa réponse était au-delà de mon entendement, alors j'ai décidé de la détailler un peu plus pour les futurs utilisateurs comme moi.

39
demandé sur Community 0000-00-00 00:00:00

1 réponses

vous pouvez créer des commandes pour que Cortana écoute. Ces commandes doivent être décrites dans un fichier XML appelé Définition Des Commandes Vocales ou VCD.

Voici un exemple:

<?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>

après avoir créé cette définition, vous devez l'enregistrer au démarrage de L'application:

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);
    }
}

an puis Outrepasser le App.OnActivated méthode pour gérer lorsque les événements sont déclenchés:

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;

le tutoriel montre l'ensemble code.

après avoir fait tout cela, vous pouvez appeler vos scripts de traitement par lots en utilisant ProcessStartInfo ou System.Diagnostics.Process.Start.

aussi, si vous êtes intéressé à répondre à L'utilisateur par la fenêtre Cortana, cochez cette case post concernant Cortana en arrière-plan.

40
répondu 2016-04-27 07:09:45