Kort probleem
Soms wil je tekst uit een ander venster halen. Bijvoorbeeld van een foutmelding, een statusregel of een scherm met gegevens.
WinGetText
is dan de functie die je zoekt. Daarmee lees je de zichtbare tekst uit een actief of bestaand venster.
Wat doet WinGetText?
WinGetText
haalt tekst op die AutoIt in een venster kan zien. Het gaat om de tekst die in de vensterinhoud staat,niet om pixels of een screenshot. Je gebruikt dit vaak samen met
WinWaitActive
, zodat je eerst wacht tot het juiste venster klaar is. Dat is handig als een programma even nodig heeft om te openen.Je voorkomt dan dat je te vroeg probeert te lezen. Zonder wachten krijg je soms lege of onjuiste tekst terug.
Twee manieren om het juiste venster te pakken
Er zijn in de bron twee duidelijke stappen:
WinWaitActivewacht tot een venster actief is.WinGetTextleest daarna de tekst uit dat venster.
Je kunt WinGetText ook direct gebruiken met de titel van het venster.Maar als het venster nog niet klaar is, is dat minder betrouwbaar. Daarom is wachten vaak de veilige keuze.
Wanneer is dit handig?
Deze aanpak is handig als:
- de tekst echt in het venster staat;
- je een foutmelding wilt uitlezen;
- je een status of melding wilt controleren;
- je later iets met die tekst wilt doen.
Het is minder handig als een programma de tekst niet als gewone venstertekst toont. Dan ziet AutoIt die inhoud mogelijk niet goed. De bron zegt niet meer dan dat, dus daar moeten we ook niet verder in gokken.
Stap voor stap
- Wacht tot het venster actief is met
WinWaitActive. - Lees de tekst uit met
WinGetText. - Gebruik de tekst verder, bijvoorbeeld om die te tonen of te controleren.
De bronpagina van de functie staat hier: https://www.autoitscript.com/autoit3/docs/functions/WinGetText.htm
Voorbeeldcode
hier is een simpele aanpak. Eerst wachten we op het juiste venster.Daarna halen we de tekst op en tonen we die in een berichtvenster.
WinWaitActive("Rekenmachine")
Local $sText = WinGetText("Rekenmachine")
MsgBox(64, "Uitgelezen tekst", $sText)
Dit voorbeeld gebruikt de venstertitel
Rekenmachine
. Die titel moet natuurlijk passen bij het venster dat jij wilt lezen. Anders vindt AutoIt het venster niet of leest het niets zinnigs uit.
Uitleg van het voorbeeld
WinWaitActive("Rekenmachine")
zorgt ervoor dat het script pas doorgaat als dat venster actief is. Dat is de sterke kant van deze techniek. Je hoeft niet zelf te raden of het programma al klaar is.
WinGetText("Rekenmachine")
haalt de tekst op uit dat venster. De uitkomst komt in
$sText
. Daarna laat
MsgBox
die tekst zien.
Let hier op
Er zijn een paar dingen die vaak misgaan:
- De venstertitel klopt niet precies.
- Het venster is nog niet actief.
- De tekst staat niet als gewone venstertekst in het programma.
- Je verwacht schermtekst, maar
WinGetTextleest venstertekst.
Kort gezegd: dit werkt goed voor leesbare tekst in het venster zelf. Het is niet bedoeld als een algemene manier om alles van een scherm te pakken.
Handig, maar niet altijd
Deze techniek is sterk als je snel tekst wilt uitlezen zonder moeilijke stappen. Je schrijft weinig code en je ziet snel resultaat. Dat maakt het fijn voor taken zoals meldingen lezen of een tekstcontrole doen. Maar als het venster traag opent, of als de tekst op een andere manier wordt getoond, dan kan het tegenvallen. Dan moet je eerst kijken of het programma die tekst wel op een gewone manier aan AutoIt doorgeeft. De bron zegt alleen dat
WinGetText
tekst uit een venster haalt, dus meer zekerheid krijg je pas door het zelf te testen.
Kleine variatie
Soms wil je eerst zeker weten dat het venster zichtbaar en actief is. Dan kun je de wachtstap apart houden en daarna pas lezen.
WinWaitActive("Mijn venster")
Local $sTekst = WinGetText("Mijn venster")
ConsoleWrite($sTekst & @CRLF)
Hier gaat de tekst naar de console in plaats van naar een berichtvenster. Dat is handig als je verder wilt testen of vergelijken.
Veelgemaakte fout
De meest voorkomende fout is denken dat
WinGetText
alles leest wat je ziet. Dat is te ruim. De bron spreekt over tekst uit een venster, en dat is iets anders dan beeld op je scherm. Een tweede fout is te snel lezen. Zeker bij programma's die nog laden, krijg je dan soms niets of te weinig terug.
WinWaitActive
helpt juist om dat te voorkomen.
Bevers gedachte
Als je tekst uit een venster wilt halen, begin dan simpel. Wacht eerst tot het venster actief is. Lees daarna de tekst met
WinGetText
. Dat is vaak de netste en rustigste weg.
