web-dev-qa-db-de.com

Wie verbinde ich Cortana-Befehle mit benutzerdefinierten Skripten?

Möglicherweise ist dies etwas zu früh, aber ich verwende Windows 10 Technical Preview Build 10122. Ich möchte Cortana so einrichten, dass benutzerdefinierte Befehle verfügbar sind. So arbeitet sie:

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

Microsoft verarbeitet den Befehl, und wenn nichts dafür vorhanden ist, durchsucht sie die Eingabe nur nach Bing. Allerdings möchte ich nur zum Beispiel so etwas sagen können

Hey Cortana, I'm going to bed now

Und haben die Eingabe I'm going to bed now Trigger Führt ein Batch-Skript, ein VBScript, einen Befehl oder eine andere Art von benutzerdefinierten Antworten aus, die im Wesentlichen die folgenden Aktionen ausführen.

C:\> shutdown -s

Gibt es eine Möglichkeit, vordefinierte benutzerdefinierte Befehle für Cortana einzurichten?

Update:

Ich habe dieses grundlegende YouTube-Tutorial erstellt und dieses fortgeschrittenere mit einem entsprechenden GitHub-Repo basierend auf talkitbrs exzellenter und sehr hilfreicher Antwort unten .

Anfangs war seine Antwort unverständlich, deshalb habe ich beschlossen, sie für zukünftige Benutzer wie mich etwas detaillierter aufzuschlüsseln.

40
Charles Clayton

Sie können Befehle erstellen, auf die Cortana wartet. Diese Befehle müssen in einer XML-Datei mit dem Namen Voice Command Definitions oder VCD beschrieben werden.

Hier ist ein Beispiel:

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

Nachdem Sie diese Definition erstellt haben, müssen Sie sie beim App-Start registrieren:

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

Und überschreiben Sie dann die Methode App.OnActivated, Die behandelt werden soll, wenn die Ereignisse ausgelöst werden:

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;

Das Tutorial zeigt den kompletten Code .

Nachdem Sie dies alles getan haben, können Sie Ihre Batch-Skripte mit ProcessStartInfo oder System.Diagnostics.Process.Start Aufrufen.

Wenn Sie dem Benutzer über das Cortana-Fenster antworten möchten, aktivieren Sie dieses Kontrollkästchen Beitrag zu Cortana im Hintergrund .

42
talkitbr

Sie können eine .bat-Datei schreiben und der Datei eine Verknüpfung zum Ordner hinzufügen: C:\ProgramData\Microsoft\Windows\Startmenü\Programme Sie können die Verknüpfung beliebig benennen und das Herunterfahren auslösen, indem Sie sagen: " Hey Cortana öffne/starte [Abkürzungsname] ". Stellen Sie sicher, dass Cortana Ihnen nur zuhört, um keinen Streich zu spielen.

1
DevEnitly