Macro's voor spraakherkenning

Deze pagina gaat hoofdzakelijk over macro's voor de Dragon produkten.


Algemeen

Heel veel problemen met macro's komen voort uit een te snelle opeenvolging van commando's. Zowel het spraakherkenningspakket als het besturingssysteem hebben soms even tijd nodig. Bouw daarom vertragingen in tussen de commando's als de macro niet werkt. In DragonDictate doe je dat met het Wait-commando. Pauzes hebben nog een extra voordeel: je ziet beter wat er gebeurt, bv. als een commando een keuzevakje aanvinkt.

Als je aan HeardWord een langer commando wilt meegeven, doe je dat als volgt:

    HeardWord "\All-Caps", "that"

Bijzondere tekens (bv. een tilde, '~') verstuur je (in NaturallySpeaking) als volgt:

    SendKeys "{~}"

Er zijn 3 manieren om toetsen te sturen vanuit een macro: SendKeys is het snelst, SendSystemKeys het langzaamst, en SendDragonKeys (pas vanaf DNS 6??!) zit daar tussen in.

De macrotaal zoals die t/m NaturallySpeaking 5 in gebruik was wordt uitgebreid (ca. 140 pagina's) beschreven in Creating Voice Commands.

Naar het begin van de pagina


Trucs

Script weergave van toets als tekst sturen

Stel je wilt de tekst '{Tab}' produceren. SendKeys "{Tab}" werkt niet, omdat Dragon dan een Tab-toets genereert. In DragonDictate doe je dan SendKeys "{", gevolgd door SendKeys "Tab}". Op die manier snapt DD niet meer dat de 2 stukken bij elkaar horen.

In DNS wordt het echter nog ingewikkelder. Het schijnt (ik heb zelf geen DNS Pro) dat zowel SendKeys "{" als SendKeys "\{" (om de '{' te "escapen") niet resulteren in het gewenste effect. De krulhaken krijg je wel door een Shift plus de bijpassende vleeshaak te sturen. Dus: voor '{' doe je SendKeys "+[" ('+' staat voor Shift). Uiteindelijk wordt het dan:

    SendKeys "+["
    SendKeys "Tab"
    SendKeys "+]"

Naar het begin van de pagina


Activeren van taken en programma's

Taakbalk en systeemvak (system tray)

Bij de meeste mensen bestaat de onderste regel van het scherm uit de volgende componenten (van links naar rechts):

Zekere onder de nieuwere versies van Windows (2000 en XP) kan je met toetsen alle knoppen en icoontjes op de onderste regel bereiken. In oudere versies van Windows (o.a. 98) lukt dat niet met de icoontjes in de system tray. Doordat die echter allemaal even groot zijn (afgezien van de tijd), kan je ze ook bereiken door pixel coordinaten op te geven. Mijn commando

    System tray (Nummer tussen 1 en 40)

is in DragonDictate dan ook heel simpel:

    SetMousePosition 0,(796-(17*_1_to_40_1)),585

Natuurlijk werkt dit commando alleen in een bepaalde resolutie, in mijn geval 800x600. Elk icoontje is 17 pixels breed. Ik tel af vanaf rechts, waarbij de tijd equivalent is aan een blok van 3 icoontjes. Het eerste echte icoontje wordt dus

    System tray 4

Met toetsen gaat het ongeveer als volgt. Na Start-Esc is de Start-knop geselecteerd (er staat een stippellijntje omheen). Met Tab ga je steeds naar een volgende deel van de onderste regel, met de pijltjestoetsen beweeg je binnen een onderdeel. Bij mij is het Quick launch-gedeelte uitgeschakeld. Om de 7e taak te activeren zeg ik

    Focus 7

en wordt (DD) het volgende script uitgevoerd:

    SendSystemKeys "{Ctrl+Esc}"
    Wait 1000
    SendKeys "{Esc}{Tab}"
    Wait 1000
    SendKeys "{ExtRight "+_1_to_40_1+"}{Space}"

Ctrl+Esc is equivalent aan de Start-knop. Met de 3e regel spring ik van de Start-knop naar de taakbalk, en vervolgens ga ik (laatste regel) met het pijltje 7 keer naar rechts (de parameter _1_to_40_1 wordt vervangen door 7).

De system tray kan je uitgaande van de Start-knop ook bereiken met Shift+Tab, zodat je in omgekeerde richting gaat. Het lijkt er wel op dat Windows de positie in de system tray onthoudt, zodat je bij een volgend commando relatief moet rekenen.

Naar het begin van de pagina


Diverse voorbeelden in Visual Basic

Algemeen

Je kan functies en procedures die je vaak gebruikt in aparte bestanden onderbrengen (een soort libraries dus). In de code die bij het commando hoort neem je dan een regel op als:

    '#uses "d:\data\VisBasic\MyLib.vbs"

Datum en tijd

    SendKeys Format (Now, "h:mmAM/PM dddd mmmm d yyyy")

produceert iets als

    3:25PM Monday May 12 2003

(natuurlijk afhankelijk van de datum en taal die je hebt ingesteld). Tussen de dubbele quotes kan je naar eigen smaak spaties (en bv. komma's) tussenvoegen en de volgorde van de verschillende onderdelen veranderen.

Word macro aanroepen vanuit NaturallySpeaking macro

Je kan een Word macro vanuit NaturallySpeaking aanroepen door het sturen (met SendKeys) van dezelfde toetsen die je ook zou gebruiken als je hem met de hand zou starten. Maar het kan ook vanuit een DNS macro, als volgt:

    Sub Main
      Word.Application.Run "Word-macronaam"
    End Sub

Je zou zelfs met een lijst kunnen gaan werken, zodat je met 1 Dragon macro een hele serie van Word macro's kan starten.

Naar het begin van de pagina


Valid XHTML 1.0!

© Henk Dalmolen
Reageer via E-mail (dalmolen@xs4all.nl)

Deze pagina is voor het laatst gewijzigd op: 10-12-2006 16:43:53