web-dev-qa-db-ja.com

Cortanaコマンドをカスタムスクリプトに接続する方法は?

これを尋ねるのは少し早いかもしれませんが、Windows 10 Technical Preview Build 10122を実行しています。カスタムコマンドを持つようにCortanaをセットアップしたいと思います。彼女の仕組みは次のとおりです。

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

マイクロソフトはコマンドを処理します。コマンドがない場合は、bingの入力を検索します。ただし、たとえば次のように言いたいです。

Hey Cortana, I'm going to bed now

そして、入力I'm going to bed nowトリガーは、基本的に次のことを行うバッチスクリプト、VBScript、コマンド、または何らかのカスタムレスポンスを実行します。

C:\> shutdown -s

Cortana用に事前定義されたカスタムコマンドを設定する方法はありますか?

更新:

これを作成しました 基本的なYouTubeチュートリアル および この高度なチュートリアル 対応する GitHub repo talkitbrの優れた非常に有用な回答に基づいて-

最初は彼の答えは私の理解を超えていたので、私のような将来のユーザーのために、もう少し詳しく説明することにしました。

40
Charles Clayton

Cortanaがリッスンするコマンドを作成できます。これらのコマンドは、 Voice Command Definitions または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;

チュートリアルでは完全なコードが表示されます

これらすべてを実行した後、ProcessStartInfoまたはSystem.Diagnostics.Process.Startを使用してバッチスクリプトを呼び出すことができます。

また、Cortanaウィンドウを介してユーザーに応答することに関心がある場合は、これを確認してください バックグラウンドでのCortanaに関する投稿

42
talkitbr

できることは、.batファイルを作成し、ファイルへのショートカットをフォルダーに追加することです:C:\ ProgramData\Microsoft\Windows\Start Menu\ProgramsちょっとCortanaを開く/開始[ショートカット名]」。 Cortanaが「いたずら」にならないようにあなただけを聞くようにしてください。

1
DevEnitly