2015-05-04 80 views
0

我有一個工作的autohotkey腳本,它帶有用於輸入的自定義文本的Windows語音識別培訓界面。 如果您已經完成了Windows語音識別的培訓,您知道它已經說了一小段文字,然後一旦它識別出該行,就會用另一短文本行進入新屏幕。微軟語音API(SAPI)用戶培訓語法

我無法弄清楚如何「打破」我的兩句話的文成兩個單獨的培訓屏幕,所以用戶不會有閱讀成千上萬的訓練文本行的都在同呼吸,沒有失誤。

如果有人數字了這一點,我將永遠愛你

enter image description here

回答

0

未經測試

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 
    } 
} 
+0

似乎不工作,否則MSGBOX,不支持被解僱,沒有什麼事情發生(校正錯字traningText到trainingText並仍然不起作用) – Gallaxhar

+0

我寫得很快,注意未經測試。我是AHK的新手,我可能會弄髒一些東西。我會在一兩分鐘內發佈修訂。 – errorseven

0

用戶培訓文本必須是一個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(); 
} 
+0

謝謝你的提示eric,你能用任何語言建立一個嗎?我可以將它翻譯成ahk – Gallaxhar

+0

在C#中添加了一個。希望它有幫助。 –