elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (Moderadores: Novlucker, seba123neo, kub0x, Eleкtro)
| | | |-+  C# Como guardar la seleccio9n del mouse "Cuando pintamos" en una variable?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: C# Como guardar la seleccio9n del mouse "Cuando pintamos" en una variable?  (Leído 267 veces)
Lest

Desconectado Desconectado

Mensajes: 1


Ver Perfil
C# Como guardar la seleccio9n del mouse "Cuando pintamos" en una variable?
« en: 23 Abril 2017, 23:27 »

Hola, es mi primera vez escribiendo en un foro, saludos a todos y gracias de antemano.

La pregunta es : Como guardar la seleccion del mouse en otra aplicacion en una variable dentro de mi programa.

Ej: Selecciono un parrafo dentro de un navegador por ejemplo de wikipedia, esa seleccion (Osea cuando pintamos con el mouse) quiero guardarla en una variable para luego usarla.

El programa lo estoy desarrollando en c# con Visual Studio 2015 y estoy usando un formulario WPF.

Gracias y perdonen la molestia.


En línea

Eleкtro
🌍 🕉️ 🛏️ Novato Astral 🛏️ 🕉️ 🌍 y...
Moderador Global
***
Desconectado Desconectado

Mensajes: 9.222


El sentido común es el menos común de los sentidos


Ver Perfil
Re: C# Como guardar la seleccio9n del mouse "Cuando pintamos" en una variable?
« Respuesta #1 en: 24 Abril 2017, 00:39 »

Hola.

Las preguntas sobre C# van en el subforo de programación .NET.

Para lo que pides hacer se requiere mucho tiempo y dedicación implementando mucho P/invoking; mediante las funciones Win32 SetWindowsHookEx, CallNextHookEx y UnhookWindowsHookEx puedes crear un hook de bajo nivel del mouse para capturar una pulsación del botón izquierdo (mensaje de ventana WM_LButtonDown), posteriormente puedes utilizar la función GetCursorPos para obtener las coordenadas del puntero del mouse, pasándole esas coordenadas a la función WindowFromPoint para obtener el handle de la ventana del control de edición donde se haya pulsado el botón izquierdo del ratón, entonces esperarías al mensaje de ventana WM_LButtonUp para determinar cuando ha finalizado la selección del mouse y acto seguido utilizarías la función SendMessage para enviar el mensaje de ventana WM_Copy a la ventana del control de edición con el que copiarías el texto seleccionado al portapapeles de Windows... y ya con la función administrada Clipboard.GetText() de la librería de clases de .NET framework obtendrías el texto

Eso sería una de las posibles formas de llevarlo a cabo. Otra forma, la cual evitaría la implementación de la mayor parte del P/Invoking (excepto el hook) sería mediante el uso de las clases de Microsoft UI Automation de la librería de clases de .NET Framework, lo cual como ventaja tendría una implementación administrada, mucho más sencilla, y eficiente, pero como desventaja resultaría excesivamente lento para esta tarea y aportaría menor compatibilidad con cierto tipos de aplicaciones y jerarquía de ventanas.

Nótese que he omitido algunos pasos importantes pero irrelevantes para un resumen, como por ejemplo las comprobaciones de ventana... que no sean nulos, comprobar que entre el mensaje de ventana WM_LButtonDown y WM_LButtonUp se haya realizado una selección y que esa selección sea de tipo textual (es decir, que contenga texto), y comprobar si existe algún texto u otro elemento guardado en el portapapales antes de reemplazarlo por nuestro texto seleccionado, y en caso afirmativo restaurar el elemento original del portapapeles al finalizar la operación.

Aquí tienes un proyecto en C# que podrías adaptar a tus necesidades:
Citar
Dynamically catches selected texts where any window you on(pdf/browser/word etc.) and translates including words.
(no lo he probado)
Nótese que el autor hace uso de la función Win32 SetClipboardViewer la cual está obsoleta (solo existe por compatibilidad), en su lugar se debería utilizar GetClipboardSequenceNumber y AddClipboardFormatListener.

¡Saludos!


« Última modificación: 24 Abril 2017, 01:04 por Eleкtro » En línea


[/cent
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines