Jump to content

Accessibility issue with the large sleep in AutoIt GUI message loop


darking
 Share

Recommended Posts

  • 2 years later...

Hello All,
I'm sorry for replying in to relative old thread, but the situation discussed here is the same till now. :)


We Discussed slow gui performance with Screen readers in combination with Gui Concept.

During my last testing of that, i noticed following summary:
The performance is the same, regardless of value in Sleep function used in GuiOnEvent Loop (Sleep(10) is the same as for example Sleep(1000)).
The process priority of running script [ also don't have any effect.
This behaviour is actual from autoit version 3. 3. 12. 0.
In previous release 3. 3. 10. 0 was gui performance with screen readers as normal as in other applications.
Gui performance is totaly fast, when the On Event mode loop is empty.
I know that it's not good practice, cause the CPU is redundantly throttled, but i'm teling it here just for info.
So, can developers of Autoit check behaviour of Sleep function in context with processing of gui events inside of Autoit.
I think that slow gui performance with screen readers is directly related with implementation of Sleep function in conjunction with processing of Gui inside Autoit.

Link to comment
Share on other sites

  • Developers

Don't think your story is related at all to this thread as that doesn't talk about GuiOnEvent() but rather GUIGetMsg() with its 10ms sleep build in.
Any replicator script you can share to show the issue you have?

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

Replicator scripts are written by Darking on the first page of this thread.

If you let the gui loop empty, the performance of Screen reader (Link also on the first page) is totaly fast.

It's not so big issue, but for Screen reader users and visualy impaired programers, the autoit is very nice language.

And when the controls are native Win32, it would be fine to have created guis also nice and fast as much as possible. .)

Link to comment
Share on other sites

  • Developers

...  yes and you have seen my answer? 
It is/was working fine for me so it is hard to figure out an issue when it's not showing up for us.
Any idea what the specific condition might be that triggers this slowness, because I do not think we figured that out previously in this thread, unless I missed it?

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

Yes, i understand, that it's hard to reproduce it. But. If you use for example variant of script with on event mode and let the loop empty, without the Sleep function, you notice, that performance of gui with Screen reader is very fast.

But if you set the Sleep to some value doesn(t matter if 10, 100 or 1000, the gui becomes to be more slower than before.

I think that this behaviour is not typical.

I understand, that High CPU usage without a Sleep can reserve more resources and fast performance of gui with Screen reader can be only side effect of this.

But it must be somethink else, because this changed between two autoit versions.

I was read the version history, but unfortunately there is nothing related to this.

 

I love autoit so much and only think why i'm trying to solve this is my

effort to have Autoit as powerfull as possible also for visualy impaired users.. :)

Thank you for your quick replyes..

Fenzik

Link to comment
Share on other sites

So, i found a best way to demonstrate slow Gui performance at all...

When you turn on Autoit 3 wrapper Gui tool with Screen reader also turned on, you can notice, that manipulating with this tool is slow.

It's also noticeable when you switch to the Wrapper gui from another window.

 

Fenzik

Link to comment
Share on other sites

  • 1 year later...

Hello.
I am one of the witnesses that you notice a lag with gui screen readers. Currently developing software, I found a solution that is the OnEventMode but it is giving me problems that I did not have with the GuiGetMSG ()
This does not depend on the computer or the hardware, as the users said. This depends on the milliseconds of waiting that is predefined in the GuiGetMSG (), in addition, the delay is very evident in any Windows PC, be it powerful, high or low resources because I have already done my tests and everything is the same . I would strongly suggest that in version 3.3.16.0 or in the next beta you change the milliseconds of guiGetMsg, which by default has 10, but it should be changed to 0 and once it is changed it is very likely that the gui will even behave much faster with screen readers, or that ultimately that function is part of a UDF and that in the GuiGetMsg function an optional variable is created where the user chooses the number of milliseconds, for example.
#include <GUIConstantsEx.au3>
$hGUI = GUICreate("Gui Example")
$button1 = GUICtrlCreateButton("Button 1", 50, 25, 50, 25)
$button2 = GUICtrlCreateButton("Button 1", 90, 25, 50, 25)
GUISetState(@SW_SHOW, $hGUI)
$GuiMSG = GuiGetMsg($milliseconds = 0)
While 1
Switch $GuiMSG
Case $GUI_EVENT_CLOSE, $Button2
ExitLoop
Case $Button1
MsgBox(0, "Information", "you have pressed button 1")
EndSwitch
WEnd
; If it were possible to modify the milliseconds of GuiGetMsg to 0, and if there was a hope of doing it, you can see a gui quite fast like all standard Windows programs or some custom graphical interface such as WX with Python with how fast it is . I think the only solution I can find is by modifying the milliseconds of the aforementioned function. There is the GuiEventMode solution, but it can bring failures on some occasions.
Finally I come to the conclusion that for now you have to get used to this slowness of the gui until they reduce the number of milliseconds of GuiGetMSG, for users with screen readers.

Link to comment
Share on other sites

  • Developers
13 hours ago, Mateocedillo said:

Finally I come to the conclusion that for now you have to get used to this slowness of the gui until they reduce the number of milliseconds of GuiGetMSG, for users with screen readers.

I've tried to understand what it is you are trying to tell us but it is unclear why the 10 ms is an real issue and why the Eventmode is not working for you, which really should the the solution to give complete control. So show me an script where you demonstrate that the EventMode is giving issues.

Jos

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

5 hours ago, Jos said:

I've tried to understand what it is you are trying to tell us but it is unclear why the 10 ms is an real issue and why the Eventmode is not working for you, which really should the the solution to give complete control. So show me an script where you demonstrate that the EventMode is giving issues.

Jos

What happens is that the 10 ms that are inside the GuiGetMSG and the GuiGetMSG inside the While causes it to generate this delay. Next I am going to show a part of a code from one of my programs, it is a part that I migrated to the EventMode and it has an error when going to the "options" submenu, so the script closes abruptly, but I think I have to pass the complete code so that you understand things better.

;Mini Calendar:
;include
#include <AutoItConstants.au3>
#include <ComboConstants.au3>
#include "include\desencriptador.au3"
#include <EditConstants.au3>
#include <fileConstants.au3>
#include <guiConstantsEx.au3>
#include <include\reader.au3>
#include "include\options.au3"
#include <include\sapi.au3>
#include <misc.au3>
#include <include\NVDAControllerClient.au3>
#include <include\kbc.au3>
#include <include\menu_nvda.au3>
#include <TrayConstants.au3>
#include "updater.au3"
#include <WindowsConstants.au3>
;#include "include\zip.au3"
Opt("GUIOnEventMode", 1)
Func principal()
    If @Compiled Then
        FileDelete("MCWeb.dat")
    EndIf
    $slanguage = IniRead("config\config.st", "General settings", "language", "")
    Global $program_ver = 0.3
    SoundPlay(@TempDir & "\sounds\soundsdata.dat\open.mp3", 1)
    $Gui_main = GUICreate("Mini calendar " & $program_ver)
    HotKeySet("{F1}", "playhelp")
    Global $programname = "Mini Calendar"
    ;Translatable items:
    Select
        Case $slanguage = "es"
            $mensaje12 = "Pulsa alt para abrir el menú."
            $mensaje13 = "&Salir"
            $menu1 = "Agendar..."
            $menu1a = "Opciones de Mini Calendario..."
            $menu2 = "Salir"
            $menu3 = "Ayuda"
            $menu4 = "&Manual de usuario"
            $menu4a = "Cambios"
            $menu5 = "Acerca de Mini Calendar"
            $menu6 = "Reportero de errores..."
            $menu7 = "Opciones"
            $menu8 = "Visitar sitio web"
            Global $recordar1 = "Agenda programada"
            Global $recordar2 = "Te recordamos que tienes que hacer "
            Global $recordar3 = "Recuerda que tienes una agenda programada ya mismo. "
            Global $recordar4 = "Prepárate para poner en marcha tus rutinas diarias a buen pie. "
            Global $recordar5 = "Es hora de realizar esta actividad "
            Global $recordar6 = "Buen ánimo, buena suerte y buena vibra para todo lo que propongas realizar "
            Global $recordar7 = "Esperemos que la siguiente actividad que hagas sea un éxito "
            Global $recordar8 = "Es hora de dejar el descanso y reanudar tu día con la siguiente actividad: "
            Global $recordar9 = "Buena suerte para esto, " & @UserName
        Case $slanguage = "eng"
            $mensaje12 = "Press alt to open the menu."
            $mensaje13 = "E&xit"
            $menu1 = "Schedule ..."
            $menu1a = "Mini Calendar Settings..."
            $menu2 = "Exit"
            $menu3 = "Help"
            $menu4 = "&User manual"
            $menu4a = "Changes"
            $menu5 = "About Mini Calendar"
            $menu6 = "Bug reporter..."
            $menu7 = "Options"
            $menu8 = "Visit website"
            Global $recordar1 = "Scheduled schedule"
            Global $recordar2 = "We remind you what you have to do "
            Global $recordar3 = "Remember that you have an schedule programmed right now. "
            Global $recordar4 = "Get ready to start your daily routines on the right foot."
            Global $recordar5 = "It's time to do this activity"
            Global $recordar6 = "Good cheer, good luck and good vibes for everything you propose to do"
            Global $recordar7 = "Let's hope that the next activity you do is a success"
            Global $recordar8 = "It is time to leave the break and resume your day with the following activity:"
            Global $recordar9 = "Good luck for this, " & @UserName
    EndSelect
    $recuerdaa = Random(2, 9, 1)
    Select
        Case $recuerdaa = 2
            Global $recuerda = $recordar2
        Case $recuerdaa = 3
            Global $recuerda = $recordar3
        Case $recuerdaa = 4
            Global $recuerda = $recordar4
        Case $recuerdaa = 5
            Global $recuerda = $recordar5
        Case $recuerdaa = 6
            Global $recuerda = $recordar6
        Case $recuerdaa = 7
            Global $recuerda = $recordar7
        Case $recuerdaa = 8
            Global $recuerda = $recordar8
        Case $recuerdaa = 9
            Global $recuerda = $recordar9
    EndSelect
    $okmessaje = "OK"
    Local $idmc = GUICtrlCreateMenu($programname)
    Local $idAgendaitem = GUICtrlCreateMenuItem($menu1, $idmc)
    GUICtrlSetOnEvent($idAgendaitem, "agendar")
    Local $idOptionsitem = GUICtrlCreateMenuItem($menu1a, $idmc)
    GUICtrlSetOnEvent($idOptionsitem, "Opciones")
    Local $idExititem = GUICtrlCreateMenuItem($menu2, $idmc)
    GUICtrlSetOnEvent($idOptionsitem, "exitpersonaliced")
    GUICtrlSetState(-1, $GUI_DEFBUTTON)
    Local $idHelpmenu = GUICtrlCreateMenu($menu3)
    Local $idHelpitema = GUICtrlCreateMenuItem($menu5, $idHelpmenu)
    GUICtrlSetOnEvent($idHelpitema, "ayuda")
    Local $idHelpitemb = GUICtrlCreateMenuItem($menu8, $idHelpmenu)
    GUICtrlSetOnEvent($idHelpitemb, "WEBSITE")
    Local $idHelpitemc = GUICtrlCreateMenuItem($menu4, $idHelpmenu)
    GUICtrlSetOnEvent($idHelpitemc, "Playhelp")
    Local $idChanges = GUICtrlCreateMenuItem($menu4a, $idHelpmenu)
    GUICtrlSetOnEvent($idChanges, "readchanges2")
    Local $idBGR = GUICtrlCreateMenuItem($menu6, $idHelpmenu)
    GUICtrlSetOnEvent($idBGR, "readchanges2")
    ;GUICtrlCreateMenuItem("", $idmc, 2)
    GUICtrlSetState(-1, $GUI_CHECKED)
    GUICtrlCreateLabel($mensaje12, 0, 100, 20, 20, $WS_TABSTOP)
    GUICtrlSetState(-1, $GUI_FOCUS)
    Local $idManualbutton = GUICtrlCreateButton($menu4, 65, 100, 20, 20)
    GUICtrlSetOnEvent($idManualbutton, "playhelp")
    Local $idExitbutton = GUICtrlCreateButton($mensaje13, 120, 100, 20, 20)
    GUICtrlSetOnEvent($idExitbutton, "exitpersonaliced")
    GUISetState(@SW_SHOW)
    While 1
    WEnd
EndFunc   ;==>principal
;This is the part of the graphical interface of the menu of my program, now the file options.au3 goes.
Func opciones()
    Opt("GUIOnEventMode", 1)
    $directorio = "c:\users\" & @UserName & "\AppData\Roaming\Microsoft\Windows\Start Menu\Programs"
    Local $rutadelarchivo = $directorio & "\Mini Calendar.nlk"
    Select
        Case $slanguage = "es"
            $mensaje0 = "Menú de opciones"
            $mensaje1 = "Iniciar Mini Calendario y agenda Con Windows (beta)"
            $mensaje2 = "Guardar opciones (recomendado)"
            $mensaje2a = "Buscar actualizaciones (recomendado)"
            $mensaje2b = "Mover el mini calendario a la bandeja del sistema"
            $mensaje3 = "Selecciona la salida de voz:"
            $mensaje4 = "&Aplicar"
            $mensaje5 = "&Cerrar"
            $mensaje6 = "No se ha podido crear el acceso directo... Puedes intentar lo siguiente: " & @CRLF & "Método 1: Ejecuta el programa como administrador, abre el menú, vé a opciones y marca la casilla que acavas de marcar." & @CRLF & "Método 2: Puede que hayan otras acciones en curso que hacen necesario reiniciar el pc. Deberías reiniciarlo, abrir este programa y volver a marcar esta casilla."
            $mensaje7 = "Selecciona la salida de texto a voz"
            $mensaje8 = "Esta es una prueba de síntesis de voz"
            $mensaje9 = "Inicio creado"
            $mensaje9a = "Por favor, reinicia tu pc para que estos cambios surtan efecto. Cierra todas las ventanas de esta aplicación que estés usando y procede con el reinicio."
        Case $slanguage = "eng"
            $mensaje0 = "Options menu"
            $mensaje1 = "Start Mini Calendar and scheduler With Windows (beta)"
            $mensaje2 = "Save options (recommended)"
            $mensaje2a = "Check for updates (recommended)"
            $mensaje2b = "Move the mini calendar to the system tray"
            $mensaje3 = "Select the voice output:"
            $mensaje4 = "&Aply"
            $mensaje5 = "&Close"
            $mensaje6 = "The shortcut could not be created... You can try the following: " & @CRLF & "Method 1: Run the program as administrator, open the menu, go to options and check the box you just checked . " & @CRLF & "Method 2: There may be other actions in progress that make it necessary to restart the pc. You should restart it, open this program and check this box again."
            $mensaje7 = "Select text-to-speech output"
            $mensaje8 = "This is a speech synthesis test"
            $mensaje9 = "Start created"
            $mensaje9a = "Please restart your pc for the changes to take effect. Close the windows of this application that you are using and then proceed to restart."
    EndSelect
    $guioptions2 = GUICreate($mensaje0)
    $idStartWindows = GUICtrlCreateCheckbox($mensaje1, 50, 100, 20, 25)
    GUICtrlSetOnEvent($idStartWindows, "iniciarconwindows")
    $idSabesettings = GUICtrlCreateCheckbox($mensaje2, 85, 100, 20, 25)
    GUICtrlSetOnEvent($idSabesettings, "guardaropciones")
    $idCheckUpds = GUICtrlCreateCheckbox($mensaje2a, 120, 100, 20, 25)
    GUICtrlSetOnEvent($idCheckUpds, "buscaractualizaciones")
    $idMinimize = GUICtrlCreateCheckbox($mensaje2b, 145, 100, 20, 25)
    GUICtrlSetOnEvent($idMinimize, "minimizar")
    $voice_Label = GUICtrlCreateLabel($mensaje7, 130, 100, 20, 25)
    $idChangevoice1 = GUICtrlCreateCombo("Sapi", 130, 120, 20, 30, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
    GUICtrlSetData($idChangevoice1, "NVDA|JAWS")
    ;GUICtrlSetOnEvent($idChangevoice1, "Cambiarvoz")
    $idBTN_Close = GUICtrlCreateButton($mensaje5, 150, 100, 50, 25)
    GUICtrlSetOnEvent($idBTN_Close, "eliminar")
    GUISetState(@SW_SHOW)
    Local $sComboRead = ""
    ;while 1

    ;Wend
EndFunc   ;==>opciones
Func iniciarconwindows()
    If _IsChecked_audio($idStartWindows) Then
        FileCreateShortcut(@ScriptFullPath, $rutadelarchivo, "", "", "", "", "")
        If Not @error Then
            MsgBox(48, $mensaje9, $mensaje9a)
        Else
            MsgBox(0, "Error", $mensaje6)
        EndIf
    Else
        SoundPlay(@TempDir & "\sounds\soundsdata.dat\CHECKBOX_unchecked.MP3", 0)
        FileDelete($rutadelarchivo)
    EndIf
EndFunc   ;==>iniciarconwindows
Func guardaropciones()
    If _IsChecked_audio($idSabesettings) Then
        IniWrite("config\config.st", "General settings", "Sabe settings", "Yes")
    Else
        SoundPlay(@TempDir & "\sounds\soundsdata.dat\CHECKBOX_unchecked.MP3", 0)
        IniWrite("config\config.st", "General settings", "Sabe settings", "No")
    EndIf
EndFunc   ;==>guardaropciones
Func buscaractualizaciones()
    If _IsChecked_audio($idCheckUpds) Then
        IniWrite("config\config.st", "General settings", "Check updates", "Yes")
    Else
        SoundPlay(@TempDir & "\sounds\soundsdata.dat\CHECKBOX_unchecked.MP3", 0)
        IniWrite("config\config.st", "General settings", "Check updates", "No")
    EndIf
EndFunc   ;==>buscaractualizaciones
Func minimizaralabandeja()
    If _IsChecked_audio($idCheckMinimize) Then
        IniWrite("config\config.st", "General settings", "Minimize", "Yes")
    Else
        SoundPlay(@TempDir & "\sounds\soundsdata.dat\CHECKBOX_unchecked.MP3", 0)
        IniWrite("config\config.st", "General settings", "Minimize", "No")
    EndIf
EndFunc   ;==>minimizaralabandeja
Func cambiarvoz()
    ;NO DISPONIBLE.
    $sComboRead = GUICtrlRead($idChangevoice1)
    IniWrite("Config\config.st", "Accessibility", "Speak Whit", $sComboRead)
    SoundPlay(@TempDir & "\sounds\soundsdata.dat\scroll.mp3", 0)
    speaking($mensaje8)
EndFunc   ;==>cambiarvoz
Func eliminar()
    GUIDelete($guioptions2)
EndFunc   ;==>eliminar
Func _IsChecked_audio($idControlID)
    SoundPlay(@TempDir & "\sounds\soundsdata.dat\CHECKBOX.MP3", 0)
    Return BitAND(GUICtrlRead($idControlID), $GUI_CHECKED) = $GUI_CHECKED
EndFunc   ;==>_IsChecked_audio

options.au3

Edited by Melba23
Code formatted and put in code tags
Link to comment
Share on other sites

  • Moderators

Mateocedillo,

When you post code in future please use Code tags - see here how to do it.  Then you get a scrolling box and syntax colouring as you can see above now I have added the tags. Thanks in advance for your cooperation.

M23

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see my UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Link to comment
Share on other sites

2 hours ago, Melba23 said:

Mateocedillo,

When you post code in future please use Code tags - see here how to do it.  Then you get a scrolling box and syntax colouring as you can see above now I have added the tags. Thanks in advance for your cooperation.

M23

Hello,
Apologies for the incumbents. I am really new to this forum and I am exploring little by little.
I think I was able to fix the problem, but I really don't quite get used to using the EventMode. It is a good solution to increase the speed of the gui with screen readers, but previously I was used to GuiGetMSG, which by itself does this slow; I hope that in the future there will be some solution.

Link to comment
Share on other sites

  • Developers

That examples contains way too much lines and is way too complex to demo an issue.
Try to simplify it to a bare minimum still showing the issue you have and I will have a look. ;)  

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource   Forum etiquette  Forum Rules 
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

Link to comment
Share on other sites

  • 1 year later...
On 6/1/2021 at 3:21 PM, Jos said:

That examples contains way too much lines and is way too complex to demo an issue.
Try to simplify it to a bare minimum still showing the issue you have and I will have a look. ;)  

How had it not occurred to me before! Here is an example of GuiCtrlSetOnEvent, but commenting out the sleep in the loop. And this makes for a negligible increase in GUI navigation performance with screen readers such as NVDA. Navigation is very fluid as in many applications:

#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>

Example()

Func Example()
    Opt("GUICoordMode", 2)
    Opt("GUIResizeMode", 1)
    Opt("GUIOnEventMode", 1)

    GUICreate("Parent1")
    GUISetOnEvent($GUI_EVENT_CLOSE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_MINIMIZE, "SpecialEvents")
    GUISetOnEvent($GUI_EVENT_RESTORE, "SpecialEvents")

    GUICtrlCreateButton("OK", 10, 30, 50)
    GUICtrlSetOnEvent(-1, "OKPressed")

    GUICtrlCreateButton("Cancel", 0, -1)
    GUICtrlSetOnEvent(-1, "CancelPressed")

    GUISetState(@SW_SHOW)

    ; Just idle around
    While 1
        ;Sleep(10)
    WEnd
EndFunc   ;==>Example

Func OKPressed()
    MsgBox($MB_SYSTEMMODAL, "OK Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc   ;==>OKPressed

Func CancelPressed()
    MsgBox($MB_SYSTEMMODAL, "Cancel Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle & " CtrlHandle=" & @GUI_CtrlHandle)
EndFunc   ;==>CancelPressed

Func SpecialEvents()
    Select
        Case @GUI_CtrlId = $GUI_EVENT_CLOSE
            MsgBox($MB_SYSTEMMODAL, "Close Pressed", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)
            Exit

        Case @GUI_CtrlId = $GUI_EVENT_MINIMIZE
            MsgBox($MB_SYSTEMMODAL, "Window Minimized", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

        Case @GUI_CtrlId = $GUI_EVENT_RESTORE
            MsgBox($MB_SYSTEMMODAL, "Window Restored", "ID=" & @GUI_CtrlId & " WinHandle=" & @GUI_WinHandle)

    EndSelect
EndFunc   ;==>SpecialEvents

 

And now, what happens if we un-comment the sleep? Simply, the behavior is the same. There is a small delay in navigation.
You could download NVDA from nvaccess.com and have a try.

Link to comment
Share on other sites

And I clarify: With GuiGetMsg() there is no way to solve this, since this has a sleep to avoid CPU consumption. But isn't there some way that even though we have a sleep it doesn't affect the performance of navigation with a graphical interface in screen readers?
And the truth is, I tried with AutoHotKey and this does not happen, this is because it is a different language, while is not used to keep the script running and such.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...