C# 书写和关闭记事本++;使用语音识别库

C# 书写和关闭记事本++;使用语音识别库,c#,speech-recognition,voice-recognition,C#,Speech Recognition,Voice Recognition,我试图编写代码,打开记事本++,写入文件,然后关闭它。我的代码包括在下面。我对C#完全是新手。有什么图书馆或方法可以做到这一点吗 // Button Reference private void button1_Click(object sender, EventArgs e) { if (button1.Text.Equals("Enable Voice Control")) { button1.Text = "Stop Voice Control";

我试图编写代码,打开记事本++,写入文件,然后关闭它。我的代码包括在下面。我对C#完全是新手。有什么图书馆或方法可以做到这一点吗

// Button Reference
private void button1_Click(object sender, EventArgs e)
{
    if (button1.Text.Equals("Enable Voice Control"))
    {
        button1.Text = "Stop Voice Control";
        recEngine.RecognizeAsync(RecognizeMode.Multiple);
    }
    else
    {
        button1.Text = "Enable Voice Control";
        recEngine.RecognizeAsyncStop();
    }
}        

public void Form1_Load(object sender, EventArgs e)
{
    Choices commands = new Choices();
    commands.Add(myCommands);
    GrammarBuilder gBuilder = new GrammarBuilder();
    gBuilder.Append(commands);
    Grammar grammar = new Grammar(gBuilder);

    recEngine.LoadGrammarAsync(grammar);
    recEngine.SetInputToDefaultAudioDevice();
    recEngine.SpeechRecognized += recEngine_SpeechRecognized;
}

void recEngine_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    Process cmd = new Process();
    cmd.StartInfo.FileName = @"notepad++.exe" ;
    //cmd.StartInfo.Arguments =@"\Write.txt";
    cmd.Start();
    cmd.CloseMainWindow();
    cmd.WaitForExit();
    cmd.Refresh();

    //if (cmd.StandardError != null)
    //Console.WriteLine(cmd.StandardError.ReadToEnd());

    var result = e.Result;
    var i = 0;
    foreach (var command in myCommands)
    {
        if (command.StartsWith("close"))
        {
            this.Close();
            //cmd.StartInfo.FileName = @"notepad++";
            cmd.Kill();
        }
        if (command.StartsWith("--") || command == string.Empty) continue;  // Skip commentBlocks and skipEmptylines
        var parts = command.Split(new char[] { '|' }); // Split the lines
        i++;
        if (command.Equals(result.Text))
        {
            Console.WriteLine("Command is  {0}: {1}", i, command);
            break;
        }
    }
}

private void richTextBox1_TextChanged(object sender, EventArgs e)
{
}

您不需要打开记事本并写入文件。你可以通过编程来完成

// Create a file to write to.
string createText = "Hello and Welcome" + Environment.NewLine;
File.WriteAllText(path, createText);

// Open the file to read from.
string readText = File.ReadAllText(path);

您可以使用以下代码关闭记事本:

Process[] processes = Process.GetProcessesByName("notepad");
foreach (var process in processes)
{
    process.Kill();
}
它将关闭记事本的所有实例。因此,最好确保记事本是你的(由语音识别程序打开)

如果您实际上不想打开记事本,而您的要求只是以编程方式捕获文本并写入文件,则使用以下代码:

// Create a file to write to.
string createText = "Hello World"; // Replace with voice captured text
File.WriteAllText(path, createText);

// Open the file to read from.
string readText = File.ReadAllText(path);

如果您想编写
.txt
文件,只需使用
文件Api
编写即可尝试自动化另一个过程是一个非常受欢迎的新手项目。这不是一个好的代码,这种代码从来都不是简单的,也不会学到什么。如果您学习了如何使用System.Windows.Automation命名空间,您就可以正确地使用它。但是考虑继续前进,你首先要编写和控制自己的程序。此项目可以等待。@Hans passnt感谢您的输入。我想通过speech打开文本文件,也可以通过Speechop在打开的文本板中写入内容。因为OP自己启动流程,所以不需要搜索流程实例。如果没有插入文本的部分,这个答案是不完整的(在我看来,这个问题不应该试图回答,而应该尽可能广泛地封闭)。@Nithish。如果您确定需要打开记事本并输入文本以实际自动模拟人机交互,则这是一个选项。如果您的要求只是捕获语音文本并写入文件,请参考我的答案以编程方式写入文件。