listo quedó. no lo voy a comilar porque es una mamada más menos mal hecha con gpt o1 porque aún no entiendo mucho lo del movimiento y activación de objetos,. pero bueno, la forma de hacerlo jalar es fácil.
%appdata%\nvda\scratchpad\appModules
unigetui.py
por ahora tiene para enfocar el botón de buscar, configuración, actualización de software y el de descubrir paquetes.
-*- coding: utf-8 -*-
import api
import ui
from scriptHandler import script
import appModuleHandler
import controlTypes
from keyboardHandler import KeyboardInputGesture
class AppModule(appModuleHandler.AppModule):
scriptCategory = "unigetui"
def __init__(self, *args, **kwargs):
super(AppModule, self).__init__(*args, **kwargs)
def find_element(self, obj, name=None, automationID=None, role=None):
"""Busca un elemento en la jerarquía de objetos por nombre, automationID y/o rol."""
matches = True
if name is not None and obj.name != name:
matches = False
if automationID is not None and getattr(obj, 'UIAAutomationId', '') != automationID:
matches = False
if role is not None and obj.role != role:
matches = False
if matches:
return obj
for child in obj.children:
result = self.find_element(child, name=name, automationID=automationID, role=role)
if result:
return result
return None
def focus_and_activate(self, element):
"""Enfoca el elemento, mueve el navegador de objetos y envía la pulsación de ENTER."""
try:
element.setFocus()
api.setNavigatorObject(element)
# Intentar ejecutar la acción predeterminada
if element.actionCount > 0:
element.doAction()
return True
else:
# Si no es posible, enviar la tecla ENTER
KeyboardInputGesture.fromName("enter").send()
return True
except Exception as e:
ui.message(f"Error al activar el elemento: {e}")
return False
@script(
description="Enfoca y activa el botón de búsqueda",
gesture="kb:alt+b"
)
def script_focus_and_click_search_button(self, gesture):
root = api.getForegroundObject()
element = self.find_element(root, automationID="FindButton", role=controlTypes.Role.BUTTON)
if element:
if self.focus_and_activate(element):
ui.message("Botón de búsqueda activado")
else:
ui.message("No se pudo activar el botón de búsqueda")
else:
ui.message("No se pudo encontrar el botón de búsqueda")
@script(
description="Enfoca el cuadro de texto de búsqueda",
gesture="kb:alt+p"
)
def script_focus_search_textbox(self, gesture):
root = api.getForegroundObject()
element = self.find_element(root, automationID="QueryBlock", role=controlTypes.Role.EDITABLETEXT)
if element:
element.setFocus()
ui.message("Cuadro de texto de búsqueda enfocado")
else:
ui.message("No se pudo encontrar el cuadro de texto de búsqueda")
@script(
description="Enfoca y activa el botón de configuración",
gesture="kb:alt+c"
)
def script_focus_and_click_config(self, gesture):
root = api.getForegroundObject()
element = self.find_element(root, name="Configuración", automationID="ToggleButton", role=controlTypes.Role.TOGGLEBUTTON)
if element:
if self.focus_and_activate(element):
ui.message("Botón de configuración activado")
else:
ui.message("No se pudo activar el botón de configuración")
else:
ui.message("No se pudo encontrar el botón de configuración")
@script(
description="Enfoca y activa el botón de descubrir paquetes",
gesture="kb:alt+d"
)
def script_focus_and_click_discover(self, gesture):
root = api.getForegroundObject()
element = self.find_element(root, name="Descubrir\nPaquetes", automationID="ToggleButton", role=controlTypes.Role.TOGGLEBUTTON)
if element:
if self.focus_and_activate(element):
ui.message("Botón de descubrir paquetes activado")
else:
ui.message("No se pudo activar el botón de descubrir paquetes")
else:
ui.message("No se pudo encontrar el botón de descubrir paquetes")
@script(
description="Enfoca y activa el botón de actualizaciones de software",
gesture="kb:alt+a"
)
def script_focus_and_click_updates(self, gesture):
root = api.getForegroundObject()
element = self.find_element(root, name="Actualizaciones\nde\nSoftware", automationID="ToggleButton", role=controlTypes.Role.TOGGLEBUTTON)
if element:
if self.focus_and_activate(element):
ui.message("Botón de actualizaciones de software activado")
else:
ui.message("No se pudo activar el botón de actualizaciones de software")
else:
ui.message("No se pudo encontrar el botón de actualizaciones de software")