69061. Kazhak,
¿Es reacondicionada o de segunda mano?
счёт: +0
78119 сообщений, 2604 страниц: 1…; 2301 23022303 2304 2305…; 2604 ↖ Вернуться к списку тем
счёт: +153
¿Es reacondicionada o de segunda mano?
счёт: +0
listo arreglé mi script y ahora funciona de lo lindo.
счёт: +0
lo barato sale caro, créeme. mejor paga esos 600 si puedes o hazlos por cuotas, pero compra una computadora con un nombre más sonado, por ejemplo acer, hp y demás. las chinas no están mal, asus por ejemplo pero la cosa cambia por que claro, son ya conocidas a nivel internacional. no te compres una gin Young por 100 euros por que vas a acabar lamentando el día en el que naciste
счёт: +0
Concuerdo. Además están las garantías, muchas de esas marcas te ofrecen garantías que puedes validar en cualquiera de sus centros autorizados, con una marca desconocida, puede que al ir el otro día ni la tienda esté ahí.
счёт: +0
me hicieron acordar la vez que me compré una toshiba, muy linda, 5 meses la tube, se desmalló un tipo en la calle y ya no andubo más
счёт: +0
En Temu hay computadoras muy buenas por 700 dólares.
счёт: +0
yo tengo una lenovo, ya llevo 2 meses con ella.
счёт: +0
Sueño con una ThinkPad de lenovo, pero cuestan múy, pero múy caras
счёт: +0
y yo sueño con una lenovo xd, parecen buenas
счёт: +0
la mía es una v15
счёт: +0
el bantaje de lenobo es lo mejor. no leo lloros.
счёт: +0
si, es hermoso.
счёт: +0
vosotros comprad en temu, ya veréis las alegrías que es posible que os den. por ejemplo, mas de 500 dólares substraídos a una chica sin comprar absolutamente nada, acceso completo a los datos del dispositivo, incluido fotos videos y contactos en segundo plano... y venta de estos mismos, así como de tus gustos, preferencias en sitios webs... si, sale muy rentable
счёт: +0
gracias buenisimo lo voy a tomar en cuenta jejeje saluditos.
счёт: +0
Amo a Lenovo
счёт: +0
счёт: +0
si sí, hay computadores en temu que son super geniales por apenas veinte mil pesitos... y mirá tu, que además tan bajo es el precio que se roban tu data, a lo mejor te lleguen cosas que no hayas pedido a casita (eso sí, gratis no son las malparidas ni mucho menos) pero de que te llegan te llegan, y como si fuera poco, el compuy a lo mejor resulta que no es un compu, sino un forro para computador con forma de gatito!
Si esque es lo más rentable del mundo, uno de pendejo también que no oferta estos aprovechos, ósea qué puede malir sal?
счёт: +0
bueno voy a tirar el script de whatsapp por acá, es un popurrí de muchas cosas jaja, entre eñl de gera y el de whatsapp plus sacamos cositas.
no tiene tantas opciones ni como uno, ni como otro; porque yo quería fque fuese algo ligero y fácil no tuviera mucha sobrecarga de cosas. entonces hay va.
primero que todo en las opciones avanzadas de NVDA permitan la carga de código en el directorio scrachpad.
Windows más r y pongan %appdata%\nvda\scratchpad
entren a appModules
allí creen una carpeta con el nombre de whatsapp
dentro, un archivo Python con el nombre: __init__.py
y el código.
ciao.
from threading import Thread
from time import sleep
import speech
from scriptHandler import script
import api
import re
import appModuleHandler
import ui # Importar el módulo ui para utilizar la función message
import controlTypes
from keyboardHandler import KeyboardInputGesture
icon_from_context_menu = {
"reply to message": "\ue97a",
"edit message": "\ue70f",
"react": "\ue76e",
"forward message": "\uee35",
"delete": "\ue74d",
"mark as read": "\ue8bd",
"mark as unread": "\ue668",
"leave the group": "\ue89b",
"star message": "\ue734",
"remove from starred messages": "\ue735",
"save as": "\ue74e",
"select message": "\ue73a",
}
def mute(time):
Thread(target=killSpeak, args=(time,), daemon=True).start()
def killSpeak(time):
if speech.getState().speechMode != speech.SpeechMode.talk:
return
speech.setSpeechMode(speech.SpeechMode.off)
sleep(time)
speech.setSpeechMode(speech.SpeechMode.talk)
class AppModule(appModuleHandler.AppModule):
category = "whatsapp"
def __init__(self, *args, **kwargs):
super(AppModule, self).__init__(*args, **kwargs)
self.execute_context_menu_option = None # Ahora es un atributo de instancia.
self.message_box_element = None
self.last_focus_message_element = None
def event_NVDAObject_init(self, obj):
# Eliminar números de teléfono de los nombres de los chats
if '+' in obj.name:
obj.name = re.sub(r'+\d[\d\s:~\&-]{12,}', '', obj.name)
def activate_option_for_menu(self, option):
obj = api.getFocusObject()
if not obj or obj.UIAAutomationId not in ("BubbleListItem", "ChatsListItem"):
return
if self.execute_context_menu_option:
return
if isinstance(option, str):
option = (option,)
self.execute_context_menu_option = option
# Enviar la tecla 'Aplicaciones' para abrir el menú contextual
KeyboardInputGesture.fromName("applications").send()
def event_gainFocus(self, obj, nextHandler):
if self.execute_context_menu_option:
# Ajuste para manejar el menú de emojis si está presente
if obj.parent.UIAAutomationId == "EmojiList":
obj = obj.parent.parent
try:
# Buscar el botón correcto en el menú contextual
targetButton = next(
(
item for item in obj.parent.children
if hasattr(item, 'firstChild') and item.firstChild and item.firstChild.name in self.execute_context_menu_option
),
None
)
except Exception as e:
ui.message(f"Error al buscar la opción en el menú contextual: {e}")
targetButton = None
self.execute_context_menu_option = None
if targetButton:
targetButton.doAction()
else:
# Si no se encuentra la opción, cerrar el menú contextual
ui.message("No se encontró la opción en el menú contextual.")
KeyboardInputGesture.fromName("escape").send()
return
nextHandler()
@script(
description="Eliminar un mensaje o chat",
gesture="kb:alt+delete",
category=category
)
def script_deletion(self, gesture):
self.activate_option_for_menu(icon_from_context_menu["delete"])
@script(
description="Editar un mensaje",
gesture="kb:alt+e",
category=category
)
def script_edit_message(self, gesture):
self.activate_option_for_menu(icon_from_context_menu["edit message"])
@script(
description='Inicia o finaliza la grabación de un mensaje de voz',
gesture='kb:control+r',
category=category
)
def script_voiceMessage(self, gesture):
send = self.get('SendVoiceMessageButton', False)
if send:
send.doAction()
mute(0.1)
return
record = self.get('RightButton', True)
if record:
if record.previous.description == '':
record.doAction()
mute(1)
else:
ui.message('El cuadro de edición no está vacío')
@script(
description='Decir el nombre del chat actual',
gesture='kb:control+shift+t',
category=category
)
def script_chatName(self, gesture):
title = self.get('TitleButton', True)
if title:
contact_name = ' '.join([obj.name for obj in title.children if len(obj.name) < 50])
ui.message(contact_name)
@script(
description='Mover entre la lista de mensajes y el cuadro de texto',
gesture='kb:alt+leftArrow',
category=category
)
def script_switchMessagesAndInput(self, gesture):
# Obtener el objeto actualmente enfocado
obj = api.getFocusObject()
if obj.UIAAutomationId == "InputBarTextBox" and self.last_focus_message_element:
# Si el foco está en el cuadro de texto y hay un mensaje previo, volver al mensaje
try:
if self.last_focus_message_element.location:
self.last_focus_message_element.setFocus()
else:
raise Exception("El mensaje anterior ya no está disponible")
except Exception as e:
ui.message("No se pudo regresar al mensaje anterior: {}".format(e))
# Intentar enfocar el último mensaje en la lista
messages_list = self.get_messages_element()
if messages_list and messages_list.lastChild:
messages_list.lastChild.setFocus()
else:
ui.message("No se pudo encontrar ningún mensaje para enfocar")
return
# Intentar obtener el cuadro de texto almacenado
message_box = self.message_box_element
if not message_box or not message_box.location:
# Si no está almacenado o no es válido, buscarlo nuevamente
message_box = next((item for item in self.get_elements() if item.UIAAutomationId == "InputBarTextBox"), None)
if message_box:
self.message_box_element = message_box
else:
ui.message("No se pudo encontrar el cuadro de texto")
return
try:
# Almacenar el último mensaje con foco antes de cambiar al cuadro de texto
if obj.UIAAutomationId == "BubbleListItem":
self.last_focus_message_element = obj
# Establecer el foco en el cuadro de texto
message_box.setFocus()
except Exception as e:
self.message_box_element = None
ui.message("Error al establecer el foco en el cuadro de texto: {}".format(e))
def get_elements(self):
try:
return api.getForegroundObject().children[1].firstChild.children
except (AttributeError, IndexError):
return []
@script(
description='Ir a la etiqueta de mensajes no leídos',
gesture='kb:alt+downArrow',
category=category
)
def script_unreadFocus(self, gesture):
messagesObject = self.get('MessagesList', False)
if not messagesObject:
return
for obj in reversed(messagesObject.children):
def get(self, id, errorMessage, gesture=None):
try:
elements = self.get_elements()
for obj in elements:
if getattr(obj, 'UIAAutomationId', '') == id:
return obj
except (IndexError, AttributeError):
pass # Manejo de posibles errores en la jerarquía de objetos.
if errorMessage:
ui.message('Elemento no encontrado')
if gesture:
gesture.send()
@script(
category=category,
description='Muestra el mensaje original en una ventana explorable',
gesture='kb:alt+c'
)
def script_showOriginalMessage(self, gesture):
# Obtener el objeto actualmente enfocado
focus = api.getFocusObject()
# Verificar que el objeto tiene el rol LISTITEM y está enfocado
if focus.role == controlTypes.Role.LISTITEM and focus.isFocusable and focus.hasFocus:
try:
# Intentar obtener el contenido del mensaje buscando en los hijos
original_text_list = []
for item in focus.children:
if item.UIAAutomationId == 'TextBlock' and item.name:
original_text_list.append(item.name)
# Unir el texto si se encontró
original_text = '\n'.join(original_text_list)
if original_text:
# Mostrar el mensaje original en una ventana explorable
ui.browseableMessage(original_text, 'Mensaje original')
else:
ui.message('No hay texto para mostrar')
except Exception as e:
# Informar el error en caso de excepción
ui.message('Error al obtener el mensaje original: {}'.format(str(e)))
else:
ui.message('El objeto actual no es un mensaje o no tiene el foco.')
@script(
category=category,
description="Abre la información para el chat actual",
gesture='kb:alt+i'
)
def script_chat_info(self, gesture):
chat_info = self.get("TitleButton", True)
if chat_info:
chat_info.doAction()
else:
ui.message("No se encontró el botón")
@script(
description='Ir a la lista de mensajes',
gesture='kb:control+alt+leftArrow',
category=category
)
def script_toMessageList(self, gesture):
obj = api.getFocusObject()
if obj.UIAAutomationId == "BubbleListItem":
ui.message(obj.name)
return
messages_list = self.get_messages_element()
if not messages_list:
ui.message("No se encontró la lista de mensajes")
return
try:
# Movemos el foco al último mensaje de la lista
last_message = messages_list.lastChild
if last_message:
last_message.setFocus()
self.last_focus_message_element = last_message
else:
ui.message("La lista de mensajes está vacía")
except Exception as e:
ui.message("Error al acceder a la lista de mensajes: {}".format(e))
def get_messages_element(self):
elements = self.get_elements()
for item in elements:
if item.UIAAutomationId == "MessagesList":
return item
return None
@script(
description='Ir a la lista de chats',
gesture='kb:alt+rightArrow',
category=category
)
def script_toChatList(self, gesture):
obj = api.getFocusObject()
if obj.UIAAutomationId == "ChatsListItem":
ui.message(obj.name)
return
chats_list = self.get_chats_element()
if not chats_list:
ui.message("No se encontró la lista de chats")
return
try:
# Movemos el foco al primer chat de la lista
first_chat = chats_list.firstChild
if first_chat:
first_chat.setFocus()
self.last_focus_chat_element = first_chat
else:
ui.message("La lista de chats está vacía")
except Exception as e:
ui.message("Error al acceder a la lista de chats: {}".format(e))
def get_chats_element(self):
elements = self.get_elements()
for item in elements:
if item.UIAAutomationId == "ChatList":
return item
return None
# Definición de gestos adicionales
__gestures = {
"kb:control+alt+leftArrow": "script_toMessageList",
"kb:alt+rightArrow": "script_toChatList",
}
счёт: +0
Yo leí esto
"forward message": "\uee35",
Y dije vamos Rayo carajo con su script voy a poder adelantar y retroceder los audios pero no.
счёт: +0
no, aún no veo como ahcerlo. estoy intentando hacer para ir al mensaje citado pero pf está muy difícil. se ahcerlo con navegador de objetos pero emularlo está cabrón.
счёт: +0
Uh lo de ir al mensaje citado estaría excelente también
счёт: +0
vamos RACING club vamos RACING club!
счёт: +1
puedes ahcerlo te mueves al objeto dentro de ese mensaje, con nvda más 6 del nnumpad enfocas el texto del citado y lo activas, das tab y shiftab y estarías en el citado.
счёт: +0
Love U
счёт: +0
Imagina. Explora. Crea.
“Porque sueño con volar como Peter Pan”. “Porque me pregunto dónde duermen las gaviotas”. “Porque quiero tener superpoderes. “Porque voy a salvar al mundo”. Y es que no hace falta salir de casa para vivir todas esas vidas que soñás. Porque los cuentos tienen alas. Nos liberan.
счёт: +0
Последнее изменение Vindu, 22.09.2024 22:14:35
que es eso tan hermoso
счёт: +0
la presentación de la página audiocuentos.com
счёт: +0
porqué no puedo escuchar los videos que ponen en las publicaciones en x? solo ve uno el, Video insertado agrupamiento; y el coso de tiempo disminuyendo desde el minuto máximo hasta las 0:00. Aclaro que esto solo en la propia conversación
счёт: +0
me expreso, me dispongo a salvar santuario o que caiga en la agonía
счёт: +0
me expreso. ser buena persona no significa dejar que se aprovechen de ti
счёт: +0
78119 сообщений, 2604 страниц: 1…; 2301 23022303 2304 2305…; 2604 ↖ Вернуться к списку тем
Чтобы писать на форуме, вам нужно сначала войти.