2010-01-13 20 views
6

Me gustaría saber cómo puedo obtener texto resaltado de cualquier ventana, por ejemplo: (excel, ie, firefox, ...). tenga en cuenta que el siguiente mensaje no funciona en la aplicación anterior WM_GETTEXT, WM_COPY, EM_GETSELTEXT.Obtener texto resaltado de la ventana activa

También he intentado con el control C (copiar) y obtener el texto seleccionado del portapapeles, pero no es una buena idea.

Idioma utilizado: C#

+1

Enviar el comando de copia no es muy educado, me pondría bastante nervioso si una aplicación mal llevada alterara mi portapapeles en el que hubiera puesto las cosas con un propósito. –

Respuesta

1

Sin respuestas ¿no? Bueno, sé que puedes obtenerlo de Excel, Word, etc. usando la interoperabilidad. Mira eso. Podría darle algunas ideas sobre cómo proceder con ie y ff. Pero básicamente la aplicación de recepción debe tener algún tipo de fascilidad para permitirte hacer esto y no creo que haya una manera general que funcione todo el tiempo.

-1

No es necesario escribir esto en C# desde cero. ¿Qué pasa con el uso del portapapeles? Este script asegura que restaura lo que estaba en el portapapeles cuando ha terminado.

Autohotkey lo hace mucho más simple.

; Hotkey: Ctrl Shift t 

^!t:: 

; Remember what was in the clipboard 
clipboardPrev = %clipboard% 

; Clear the clipboard 
clipboard:= 

Sleep,200 

; Send a Ctrl C to copy the current selection 
SendInput, {Ctrl down}c{Ctrl up} 

Sleep,200 

; Get the current selection from the clipboard 
selectedText=%Clipboard% 

if SelectedText = 
{ 
    ; If the first attempt didn't get any test, try again 
    Sleep,200 

    ; Send a Ctrl C to copy the current selection 
    SendInput, {Ctrl down}c{Ctrl up} 

    ; Get the current selection from the clipboard 
    selectedText=%Clipboard% 

} 

; Restore the clipboard 
clipboard=%clipboardPrev% 

MsgBox, %selectedText% 

return 
+2

creo que su respuesta está en el idioma equivocado;) – caesay

+0

Entiendo que lo está pidiendo en C#, pero eso requeriría mucho * trabajo y pruebas. Puede compilar esto en un ejecutable y luego simplemente llamar desde la aplicación C# utilizando la clase Process. – Ash

+0

hola, gracias por su respuesta actualmente en mi aplicación estoy usando el método del portapapeles, pero estoy enfrentando problemas con Google Chrome. Después de enviar el control c a Google Chrome, el texto seleccionado o el valor del portapapeles está vacío. He visto muchos programas como wordweb ... que pueden obtener el texto resaltado sin usar el portapapeles, ¿cómo puedo hacer eso? Lo siento por mi mal inglés. – Gaby

1

No hay una respuesta de propósito general a esta pregunta. Cada clase de ventana tendrá una solución diferente.

Por ejemplo, si el texto hilighted está en una ventana de edición, a continuación, puede utilizar EM_GETSEL para obtener el rango de la selección, a continuación, WM_GETTEXT para obtener el texto (y luego tirar la parte no seleccionada de forma) o EM_LINEFROMCHAR a su vez ese rango en índices de línea, y luego EM_GETLINE para obtener el texto seleccionado una línea a la vez.

Pero esto no funcionará para ninguna otra clase de ventana.

1

No lo he probado, pero la API de automatización de la UI de Microsoft debería tener la funcionalidad que necesita.

La UI Automation API es lo que usaría si estuviera construyendo un lector de pantalla para ayudar a las personas ciegas. Por lo tanto, definitivamente debería poder acceder al texto seleccionado en una aplicación arbitraria.

Un buen lugar para empezar sería con el "patrón de texto general" en http://msdn.microsoft.com/en-us/library/ms745158.aspx

también mantener el ojo en cuestión 517694. Creo que encontrará que las respuestas a esa pregunta resolverán su problema.

Cuestiones relacionadas