Speech recognition 使用语音识别发送连续密钥

Speech recognition 使用语音识别发送连续密钥,speech-recognition,voice,sendkeys,Speech Recognition,Voice,Sendkeys,我希望当我说“空格”时,它应该一直插入空格,直到我说“停止”。这是我的代码: private void button1_Click(object sender, EventArgs e) { button2.Enabled = true; button1.Enabled = false; Choices sList = new Choices(); sList.Add(new string[] { "space", "

我希望当我说“空格”时,它应该一直插入空格,直到我说“停止”。这是我的代码:

    private void button1_Click(object sender, EventArgs e)
    {

        button2.Enabled = true;
      button1.Enabled = false;
        Choices sList = new Choices();
        sList.Add(new string[] { "space", "stop" });
        Grammar gr = new Grammar(new GrammarBuilder(sList));

        try
        {
            sRecognize.RequestRecognizerUpdate();
            sRecognize.LoadGrammar(gr);
            sRecognize.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(sRecognize_SpeechRecognized);
            sRecognize.SetInputToDefaultAudioDevice();
            sRecognize.RecognizeAsync(RecognizeMode.Multiple);

        }
        catch { return; }

     }


    void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
    {

       textBox1.Text = e.Result.Text.ToString(); 
        //throw new NotImplementedException();
        if (textBox1.Text == "space")
            //while (!e.Result.Text.ToString().Equals("stop"))
            {
                SendKeys.Send(" ");

            }
    }
private void按钮1\u单击(对象发送者,事件参数e)
{
按钮2.Enabled=true;
按钮1.启用=错误;
选项列表=新选项();
添加(新字符串[]{“空格”,“停止”});
语法gr=新语法(新语法生成器(sList));
尝试
{
sRecognize.RequestRecognizerUpdate();
认知负荷语法(gr);
sRecognize.SpeechRecognized+=新事件处理程序(sRecognize_SpeechRecognized);
sRecognize.setInputOdeFaultAudioDevice();
sRecognize.RecognizeAsync(RecognizeMode.Multiple);
}
catch{return;}
}
void sRecognize_SpeechRecognized(对象发送方,SpeechRecognizedEventArgs e)
{
textBox1.Text=e.Result.Text.ToString();
//抛出新的NotImplementedException();
如果(textBox1.Text==“空格”)
//而(!e.Result.Text.ToString().Equals(“stop”))
{
SendKeys.Send(“”);
}
}

因为我只是一个初学者,所以如果可能的话,请用注释帮助我理解您的代码。

创建一个调用Sendkeys.Send(“”)的计时器事件,然后在识别“space”时启动计时器,在识别“stop”时停止计时器

using System.Threading;
Timer thetimer;
void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
    if (e.Result.Text.ToString() == "space")
    {
        theTimer = new Timer(TimerCallback(timeExpired), 500); // 500 ms
    }
    else // if is stop
    {
        theTimer.Change(Timeout.Infinite, Timeout.Infinite); // stop the timer
    }
}

void timeExpired(Object stateInfo)
{
    SendKeys.Send(" ");
}
也可以使用其他计时器机制,但这非常简单