Einleitung
Für längere Zeit suchte Ich verzweifelt nach einer Möglichkeit, einem AutoIt Skript über ein Headset mündliche Befehle zu erteilen. Ich wollte wenn möglich nicht auf überteuerte zusätzliche Programme wie z.B. "Dragon Naturally Speaking" zurückgreifen, und hatte auch standartmäßig auf Win XP keine windowseigene Spracherkennung. Nachdem mir mehrmals in verschiedenen Skriptercommunitys versichert wurde, dass so etwas nicht möglich sei, wurde Ich durch Zufall in

fündig. Es ist nämlich sehr wohl möglich und funktioniert sehr gut.
Das braucht man:
So funktioniert es:
Zuerst einmal müsst ihr das Microsoft Speech SDK installieren.
Ab dann könnt ihr die das oben verlinkte Script wie gewohnt in jedes andere Skript einbinden:
Code:
#include <SAPIListBox.au3>
Die SAPIListBox.au3 ermöglicht es euch dann in erster Linie, in eure GUI eine spezielle "SAPI"-ListBox einzubauen. Diese unterscheidet sich optisch nicht von der normalen ListBox, ist jedoch Voice sensitive. Sie makiert wenn aktiviert automatisch (durch Zugriff auf das Microsoft Speech SDK) denjenigen ihrer Einträge, welchen Sie gehört zu meinen glaubt. Zunächst braucht ihr dafür eine GUI, in welche ihr includen könnt:
Code:
#include <GuiConstantsEx.au3>
[COLOR="Red"]#include <SAPIListBox.au3>[/COLOR]
$fester = GUICreate("Beispiel zur Spracherkennung",400,300)
GUISetState()
While 1
$msg = GUIGetMsg()
switch $msg
case $GUI_Event_Close
ExitLoop
EndSwitch
WEnd
Nun müsst ihr in diese GUI die erwähnte SAPIListBox einbauen:
Code:
$fester = GUICreate("Beispiel zur Spracherkennung",400,300)
[COLOR="Red"]$wortbox = _GUICtrlSAPIListBox_Create(10, 10, 380, 280)[/COLOR]
Nun müsst ihr noch angeben,
welche Wörter die SAPIListBox erkennen soll, und
sie enabeln (damit sie anfängt darauf zu achten was gesagt wird):
Code:
#include <GuiConstantsEx.au3>
#include <SAPIListBox.au3>
[COLOR="Green"]dim $msg, $wortbox_array[5] = ["Up","Down","Left","Right","Wait"][/COLOR]
$fester = GUICreate("Beispiel zur Spracherkennung",400,300)
$wortbox = _GUICtrlSAPIListBox_Create(10, 10, 380, 280)
GUISetState()
[COLOR="Red"]_GUICtrlSAPIListBox_EnableSpeech($wortbox, 1)[/COLOR]
[COLOR="Green"]_GUICtrlSAPIListBox_AddArray($wortbox, $wortbox_array)[/COLOR]
Und ganz zum Schluss müsst ihr noch angeben, was passieren soll, wenn die SAPIListBox ein bestimmtes Wort erkannt hat (in diesem Fall die Maus bewegen:
Code:
While 1
$msg = GUIGetMsg()
[COLOR="Red"]$mausposition = MouseGetPos()[/COLOR]
[COLOR="Red"]if _GUICtrlSAPIListBox_CurSelChanged($wortbox) = True Then
if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Up") = 0 Then
MouseMove($mausposition[0],$mausposition[1]-50)
EndIf
if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Down") = 0 Then
MouseMove($mausposition[0],$mausposition[1]+50)
EndIf
if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Left") = 0 Then
MouseMove($mausposition[0]-50,$mausposition[1])
EndIf
if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Right") = 0 Then
MouseMove($mausposition[0]+50,$mausposition[1])
EndIf
EndIf[/COLOR]
switch $msg
case $GUI_Event_Close
ExitLoop
EndSwitch
WEnd
Umfangreiche Beispielskripts findet ihr im oben verlinkten Thread.
UDF Befehle
_GUICtrlSAPIListBox_Create($left, $top, $width, $height, $enable_speech = True, $enable_listbox = True, $hide_listbox = False, $items = False)
_GUICtrlSAPIListBox_EnableSpeech($SAPIListBox, $toggle)
_GUICtrlSAPIListBox_Enable($SAPIListBox, $toggle)
_GUICtrlSAPIListBox_Hide($SAPIListBox, $toggle)
_GUICtrlSAPIListBox_AddString($SAPIListBox, $text)
_GUICtrlSAPIListBox_DeleteString($SAPIListBox, $index)
_GUICtrlSAPIListBox_GetSel($SAPIListBox, $index)
_GUICtrlSAPIListBox_InsertString($SAPIListBox, $text, $index)
_GUICtrlSAPIListBox_SetToolTip($SAPIListBox, $text)
_GUICtrlSAPIListBox_AddString($SAPIListBox, $array)
_GUICtrlSAPIListBox_GetCount($SAPIListBox)
_GUICtrlSAPIListBox_GetText($SAPIListBox, $index = -1)
_GUICtrlSAPIListBox_GetNewIndex($SAPIListBox)
_GUICtrlSAPIListBox_Refresh($SAPIListBox)
_GUICtrlSAPIListBox_ResetContent($SAPIListBox)
_GUICtrlSAPIListBox_CurSelChanged($SAPIListBox)
SAPI_SpeechProperties()
Troubleshooting & FAQ
Q: Funktioniert das ganze auch für Vista und/oder Win7?
A: Dem englischen Forum nach nicht - ich habe es aber auch noch nicht getestet.
Q: Obwohl ich das Microsoft Speech SDK installiert habe, bekomme ich sobald Ich mein Skript ausführen möchte einen "Could not create SAPI List Box control. Ensure you have installed the Microsoft Speech SDK 5.1..." Error?!
A: Man muss in diesem Fall von Hand die "SAPI51ListBox.ocx" Active X control auf seinem Computer registrieren. Dazu klickt man auf "Start" > "Ausführen", gibt den Pfad zur .ocx Datei an ("C:\Programme\Microsoft Speech SDK 5.1\Bin\SAPI51ListBox.ocx") und drückt OK. Nun sollte es funktionieren.
Credits
Die UDF (SAPIListBox.au3) sowie teile des Tutorials stammen von seangriffin von autoitscript.com. Ich habe nur zusammengefasst und auf Deutsch übersetzt.