Open marlon-sousa opened 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
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/