thgcode / snippetsForNVDA

Text snippets handling for the NVDA screen reader, including clipboard memory and more
GNU General Public License v2.0
4 stars 6 forks source link

Evitar o uso do clipboard como método de passagem de informações do snippet para o texto #9

Open marlon-sousa opened 4 years ago

marlon-sousa commented 4 years ago

Precisamos evitar que o clipboard seja usado apenas para passagem dos snippets para o texto quando são recuperados.

Isso é necessário pois ser intrusivos e usarmos o clipboard para resolver uma parte de um problema que é do addon pode prejudicar o operar do usuário, sobrescrevendo por exemplo algo que estava no clipboard ao recuperar o snippet.

Como implementar

Pesquisei por bastante tempo e o código do NVDA parece não oferecer uma API de alto nível do tipo EnviaTexto(texto). As abstrações principais estão no módulo inputCore mas são de bastante baixo nível.

Acima, no módulo keyboardHandler, classe KeyboardInputGesture, demos o método send() que pode oferecer uma guia base para usar as coisas do imputCore.

Quem implementar pode tentar usá-lo diretamente enviando uma série de gestures compostos de cada caracter da string a ser colocada no texto, mas há problemas com esta implementação se o NVDA estiver configurado para não repassar comandos não mapeados para gestos diretamente para o sistema.

O ideal seria construir uma API com base nesta função que enviasse diretamente strings, mas mesmo assim precisaríamos testar esta configuração. Se ela estiver sendo considerada, o nível precisará ser ainda mais baixo.

Outra alternativa seria usar muitas implementações de bibliotecas que já fazem esse tipo de coisa. Deixo abaixo links para a pesquisa:

https://stackoverflow.com/questions/13564851/how-to-generate-keyboard-events-in-python

https://github.com/asweigart/pyautogui

https://pypi.org/project/keyboard/

https://pypi.org/project/SendKeys/

thgcode commented 4 years ago

Link com outra forma de resolver o problema. Acredito que seja mais simples do que a solução proposta pelo fato do NVDA já ter o handle do campo de edição. https://stackoverflow.com/questions/8271813/setting-text-of-an-edit-control-in-another-window/8273370