【发布时间】:2015-05-04 20:02:49
【问题描述】:
我有一个可以工作的自动热键脚本,它可以打开带有自定义文本输入的 Windows 语音识别训练界面。 如果您曾经接受过 Windows 语音识别的培训,您就会知道它让您说出一小行文本,然后一旦它识别出该行,就会进入一个带有另一短行文本的新屏幕。
我不知道如何将我的两句话文本“分解”成两个单独的培训屏幕,这样用户就不必一口气阅读数千行培训文本而不会出错。
如果有人知道这一点,我会永远爱你
【问题讨论】:
标签: sapi
我有一个可以工作的自动热键脚本,它可以打开带有自定义文本输入的 Windows 语音识别训练界面。 如果您曾经接受过 Windows 语音识别的培训,您就会知道它让您说出一小行文本,然后一旦它识别出该行,就会进入一个带有另一短行文本的新屏幕。
我不知道如何将我的两句话文本“分解”成两个单独的培训屏幕,这样用户就不必一口气阅读数千行培训文本而不会出错。
如果有人知道这一点,我会永远爱你
【问题讨论】:
标签: sapi
未经测试
hwnd:=WinExist("A")
Title:="My App's Training"
RC := ComObjCreate("SAPI.SpSharedRecoContext")
MyTrainingText := new TrainingText("Some custom text", Title)
MyTrainingText.get_MyMethod()
MyTrainingText := new TrainingText("Some more training text", Title)
MyTrainingText.get_MyMethod()
Class TrainingText
{
__New(x, y)
{
this.Text := x
this.Title := y
}
get_MyMethod()
{
Title := this.Title
trainingText := this.Text
if RC.Recognizer.IsUISupported("UserTraining")
{
RC.Recognizer.DisplayUI(ComObj(3,hwnd), Title, "UserTraining", traningText)
}
else MsgBox, Not supported
}
}
【讨论】:
用户训练文本需要是double-null terminated string,也称为多字符串。每个以 null 结尾的子字符串将是一个单独的话语。我对 AutoHotKey 不够熟悉,不知道如何用该语言构建一个。
在 C# 中,将字符串数组转换为多字符串的函数如下所示:
static string StringArrayToMultiString(params string[] values)
{
if (values == null) throw new ArgumentNullException("values");
StringBuilder multiString = new StringBuilder();
foreach (string s in values)
{
multiString.Append(s);
multiString.Append('\0');
}
return multiString.ToString();
}
【讨论】: