该代码不是那么完整。
private
{ Private declarations }
SpSharedRecoContext1 : TSpSharedRecoContext;
fMyGrammar : ISpeechRecoGrammar;
procedure SpSharedRecoContext1Recognition(ASender: TObject; StreamNumber: Integer;
StreamPosition: OleVariant;
RecognitionType: SpeechRecognitionType;
const Result: ISpeechRecoResult);
procedure SpSharedRecoContext1Hypothesis(ASender: TObject; StreamNumber: Integer;
StreamPosition: OleVariant;
const Result: ISpeechRecoResult);
过程TForm1.FormCreate(Sender:TObject);
开始
SpSharedRecoContext1:= TSpSharedRecoContext.Create(self);
SpSharedRecoContext1.OnHypothesis:= SpSharedRecoContext1Hypothesis;
SpSharedRecoContext1.OnRecognition:= SpSharedRecoContext1Recognition;
fMyGrammar:= SpSharedRecoContext1.CreateGrammar(0);
fMyGrammar.DictationSetState(SGDSActive);
结束;
过程TForm1.SpSharedRecoContext1Recognition(ASender:TObject; StreamNumber:Integer;
StreamPosition:OleVariant;
RecognitionType:SpeechRecognitionType;
const结果:ISpeechRecoResult);
开始
Memo1.Text:= Result.PhraseInfo.GetText(0,-1,true);
结束;
过程TForm1.SpSharedRecoContext1Hypothesis(ASender:TObject; StreamNumber:Integer;
StreamPosition:OleVariant;
const结果:ISpeechRecoResult);
开始
Memo1.Text:= Result.PhraseInfo.GetText(0,-1,true);
结束;
我的问题是,vista-OS语音命令将在我的程序上拦截。如果我说“开始”,而不是在memo1上写开始,而是按桌面上的开始菜单。或类似“开始取消编辑删除选择”之类的命令,请帮助.....对不起,我的英语
最佳答案
您需要使用进程内识别器,而不是共享识别器。查看SpInprocRecoContext对象。
特别是,您还需要设置识别器的AudioInput属性,以便Inproc识别器知道从何处获取音频。
一个完整的简单命令示例是Windows 7或Windows Vista SDK的一部分-安装后,它位于$(WindowsSdkDir)\ Samples \ winui \ speech \ simpledictation中。
这些示例使用C ++,但是您应该可以将其用作启动点。
关于delphi - 如何在Delphi2009 + Vista中创建一个简单的听写板,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2742700/