Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-01-2007
Q37 Q37 is offline
Registrado
 
Registrado: ene 2007
Posts: 4
Poder: 0
Q37 Va por buen camino
Pasar palabra bajo cursor en un programa a aplicación Delphi

Antes que nada ¡Feliz Año!

Estoy haciendo una aplicación que debe funcionar parecido al Babylon/Ifinger u otro programa tipo diccionario. Es decir, tras pulsar una combinación de teclas, debe pasar la palabra en la que se encuentra posicionado el cursor (en la aplicación que sea - Word, Outlook,etc) a mi programa, donde se buscará si la palabra existe en la base de datos y mostrará los campos pertinentes.

Tengo controlado el tema de capturar la combinación de teclas desde otro programa y pasar el foco a mi aplicación, pero el pasar la palabra bajo el cursor me parece un poco, bastante, superhipermega dificil que t k...

Alguna ayudita por caridad?
Responder Con Cita
  #2  
Antiguo 07-01-2007
Q37 Q37 is offline
Registrado
 
Registrado: ene 2007
Posts: 4
Poder: 0
Q37 Va por buen camino
Conseguido a medias

He resuelto el problema pero no al 100%

Consigo, una vez seleccionada una palabra, mediante
SendMessage( hVentana, WM_COPY, 0, 0 );
pasarla al portapapeles si lo contenido en ventana NO está en HTML. Es decir, funciona con WORD, NOTEPAD, etc pero no con IE, Thunderbird, etc (esta es la explicación que he leido).

Estoy intentando enviar eventos de teclado para simular Ctrl+C pero no funciona. He probado:

keybd_event($11,0,0,0);
keybd_event($43,0,0,0);
keybd_event($43,0,KEYEVENTF_KEYUP,0);
keybd_event($11,0,KEYEVENTF_KEYUP,0);

y

PostMessage( hVentana,wm_KeyDown,Ord(11),0);
PostMessage( hVentana,wm_KeyDown,Ord(43),0);
PostMessage( hVentana,wm_KeyUp,Ord(43),0);
PostMessage( hVentana,wm_KeyUp,Ord(11),0);

¿Qué estoy haciendo mal?

¿Teneis alguna idea de cómo pasar lo selecionado en otra ventana al portapapeles?

Gracias por adelantado.
Responder Con Cita
  #3  
Antiguo 09-01-2007
rivers rivers is offline
Registrado
 
Registrado: ene 2007
Posts: 3
Poder: 0
rivers Va por buen camino
Amigo prueba esto haber si es lo que quieres:

keybd_event(VK_CONTROL,0,0,0); // CTRL presionado
keybd_event(VkKeyScan('V'),0,0,0); // V presionada
keybd_event(VkKeyScan('V'),0,2,0); // V presionada
keybd_event(VK_CONTROL,0,2,0); // Soltar CTRL.

Saludos,
Pedro.
Responder Con Cita
  #4  
Antiguo 11-01-2007
Q37 Q37 is offline
Registrado
 
Registrado: ene 2007
Posts: 4
Poder: 0
Q37 Va por buen camino
Unhappy Sigue sin funcionar

No funciona y el caso es que la respuesta que me has dado es la que ponen en casi todos los foros.

Seguiré investigando y mientras tanto seguiré con la "chapucilla" de que sólo funcione en Word, Notepad, etc. usando

SendMessage( hFocusWin, WM_COPY, 0, 0 );


De todas formas gracias por tu respuesta.
Responder Con Cita
  #5  
Antiguo 11-01-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Thumbs up

Cita:
Empezado por Q37

Estoy haciendo una aplicación que debe funcionar parecido al Babylon/Ifinger u otro programa tipo diccionario.
Hola:
No se si los tiros van por ahí, pero por si acaso, te hago una reflexión:

¿Alguna vez te has planteado el porqué de muchos sitios, a la hora de registrarse exigen introducir un código generado en una imagen casi ilegible?

Pues las respuesta sería algo así como para evitar que los "robots" se registren automáticamente, o evitar el spam... etc...

A la vista de lo dicho, tal vez sería oportuno plantearse tu aplicación a modo de OCR (Reconocimiento óptico de caracteres); coger la palabra que está justamente bajo el cursor y "reconocerla". Aunque esto se plantea una tarea difícil, creo que justamente Babylon (el traductor), trabajaba así. De este modo, el programa sería muy eficaz a la hora de obtener dicha palabra.

De otro modo; trabajar con ventanas, obtener el texto de la ventana, y dilucidar justamente cual es la palabra que está bajo el cursor, también se me antoja una compleja tarea. Concretamente para los documentos HTML, date cuenta que no es texto puro, sino etiquetas por doquier y se puede complicar mas si esos documentos HTML están protegidos contra el "copiar/pegar".
Imagínate como podrías obtener un texto de un archivo PDF protegido. Obviamente con el "copiar/pegar" sería imposible, por eso te comentaba lo del OCR.


En fín, ya irás comentando tus progresos.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #6  
Antiguo 12-01-2007
rivers rivers is offline
Registrado
 
Registrado: ene 2007
Posts: 3
Poder: 0
rivers Va por buen camino
Cita:
Empezado por rivers
Amigo prueba esto haber si es lo que quieres:

keybd_event(VK_CONTROL,0,0,0); // CTRL presionado
keybd_event(VkKeyScan('V'),0,0,0); // V presionada
keybd_event(VkKeyScan('V'),0,2,0); // V presionada
keybd_event(VK_CONTROL,0,2,0); // Soltar CTRL.

Saludos,
Pedro.
Has probado de poner un sleep(100) antes de este proceso?, ya que a veces no hay suficiente tiempo para la aplicación.
Ah!! por cierto en vez de VkKeyScan('V') debes poner 'C' para el Copy y previamente seleccionar el texto.

Saludos.

Última edición por rivers fecha: 12-01-2007 a las 09:56:22.
Responder Con Cita
  #7  
Antiguo 13-01-2007
Q37 Q37 is offline
Registrado
 
Registrado: ene 2007
Posts: 4
Poder: 0
Q37 Va por buen camino
Respuesta conjunta

Respondo a la vez a Rivers y a Ardilla.

Si he probado a poner Sleep(n) despues de cada keybd_event pero tampoco funciona.

Respecto a lo de afrontarlo en plan OCR ni se me habia ocurrido, en primer lugar porque en el tema del API de Windows, tal y como decía un profe que tuve, "estoy en condiciones óptimas para aprender"

Crei que simular un Doble Clik y luego Ctrl+C sería lo más asequible para mis conocimientos pero, aunque sigo creyendo que TIENE QUE HABER UNA FORMA DE CONSEGUIRLO, quizas explorar cómo hacerlo en plan OCR sea la solución.

Por cierto Ardilla, alguna idea para comenzar a andar?

Gracias chavales por vuestras respuestas. Seguireis leyendo mis lloros/progresos.
Responder Con Cita
  #8  
Antiguo 13-01-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Bueno pues con relación a lo de enviar una secuencia al teclado a la ventana deseada, esto si te debería funcionar:
Código Delphi [-]
procedure xxxx(Sender: TObject);
Var
KeyState : TKeyboardState ;
begin
  GetKeyboardState(KeyState);
  KeyState[vk_CONTROL] := $81;
  SetKeyboardState(KeyState);
  PostMessage(hVentana,WM_KEYDOWN,VK_V,1);
  PostMessage(hVentana,WM_KEYUP,  VK_V,1);
  KeyState[vk_CONTROL] := 0;
  SetKeyboardState(KeyState);
End;

En este caso, se envia un CTRL-V

Con relación al tema OCR, vi hace algún tiempo algunos de los proyectos de SourceForge, y aunque muchos de ellos tienen buena pinta, no llegué a ver que ninguno funcionara. No obstante el código está allí.
Aunque sería estupendo abrir un hilo tal como se ha hecho con muchos otros temas (por ejemplo, un proyecto de facturación), para ver la evolución de un OCR realizado en Delphi.
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Pasar programa de delphi 5 a 7 ... pregunta. chelejuan Varios 2 13-10-2005 18:41:01
Programa bajo msdos marandge Windows 2 13-09-2005 13:30:30
Pasar texto de una aplicacion delphi a otra OmarPerez API de Windows 4 13-07-2005 20:56:19
Pasar una aplicación de EVB A delphi.net User_Baja_2 Varios 0 14-05-2005 12:59:57
Permisos bajo delphi asirvent API de Windows 2 03-05-2004 16:21:18


La franja horaria es GMT +2. Ahora son las 20:13:18.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi