web-dev-qa-db-fra.com

Comment connecter des commandes Cortana à des scripts personnalisés?

C’est peut-être un peu tôt pour demander cela, mais j’utilise Windows 10 Technical Preview Build 10122. Je voudrais configurer Cortana pour qu’il ait des commandes personnalisées. Voici comment elle travaille:

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

Microsoft traitera la commande et, s’il n’ya rien pour elle, elle recherchera simplement l’entrée sur bing. Cependant, j'aimerais pouvoir dire quelque chose comme, par exemple

Hey Cortana, I'm going to bed now

Et avoir l'entrée I'm going to bed now trigger exécute un script de traitement par lots, un script VBScript, une commande ou une sorte de réponse personnalisée qui effectue essentiellement les opérations suivantes.

C:\> shutdown -s

Est-il possible de configurer des commandes personnalisées prédéfinies pour Cortana?

Mise à jour:

J'ai créé ce tutoriel de base sur YouTube et celui-ci plus avancé avec un GitHub repo correspondant basé sur l'excellente et très utile réponse de talkitbr - ci-dessous .

Au début, sa réponse était incompréhensible et j'ai donc décidé de la détailler un peu plus en détail pour les futurs utilisateurs comme moi.

40
Charles Clayton

Vous pouvez créer des commandes à l'écoute de Cortana. Ces commandes doivent être décrites dans un fichier XML appelé Définitions 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);
    }
}

Puis remplacez le App.OnActivated méthode pour gérer le déclenchement des événements:

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 le code complet .

Après avoir fait tout cela, vous pouvez appeler vos scripts batch en utilisant ProcessStartInfo ou System.Diagnostics.Process.Start.

De même, si vous souhaitez répondre à l'utilisateur via la fenêtre Cortana, cochez ceci message concernant Cortana en arrière-plan .

42
talkitbr

Ce que vous pouvez faire est d’écrire un fichier .bat et d’ajouter un raccourci au fichier dans le dossier: C:\ProgramData\Microsoft\Windows\Menu Démarrer\Programmes. Vous pouvez nommer le raccourci comme bon vous semble et déclencher la fermeture en disant: " Hey Cortana ouvrir/démarrer [nom du raccourci] ". Assurez-vous que Cortana ne vous écoute que pour ne pas vous faire "blaguer".

1
DevEnitly