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 04-10-2003
JulioCesarPauli JulioCesarPauli is offline
Registrado
 
Registrado: ago 2003
Posts: 4
Poder: 0
JulioCesarPauli Va por buen camino
Post Enviar Teclas a una aplicacion

Hola:

Otra vez con lo mismo

He leido los foros y encontrado la solucion para envio de teclas a otra aplicacion, particularmente me funciono el truco http://www.clubdelphi.com/vertruco.php?id=411

pero mi problema es realmente que no encuentro como obtener el foco del "campo" al que quiero pasarle las teclas

Estoy haciendo un "Parche" para una aplicacion que solo tengo el EXE y requiero enviarle ciertos datos.

Ok.. visto de otra manera.. si tuviesen que enviarle teclas digamos al explorador de internet cuya pagina principal es Yahoo como hago para que se envien los datos al campo de busqueda, porque cuando se abre el explorador, no recibe el foco ningun campo y las teclas se "pierden"

Aunque este no es el caso, esto me ayudaria a resolver mi problema.

P.D. no me sirve el enviar TAB's y Flechitas
Responder Con Cita
  #2  
Antiguo 05-10-2003
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El problema aquí es que para poder poner el foco en el control deseado necesitas poder identificar dicho control.

La única manera que se me ocurre es similar a mandar tabs o flechitas pero con la diferencia de que no lo nota el usuario.

Comienzas identificando la ventana del programa con FindWindow. Para ello necesitarás saber el título de la ventana y/o el nombre de clase. Me parece más conveniente lo último para evitar confusiones con otra posibles ventanas que tengan el mismo título.

La manera má rápida de saber el nombre de la clase es usando el programa WinSight que viene incluído con Delphi.

Una vez que tengas el "handle" de la ventana usas FindWindowEx para encontrar el control deseado. Deberás aplicar tantos FindWindowEx (ejemplo abajo) como controles haya antes del deseado.

Esta es la parte similar a la de mandar Tabs pero el usuario no se percata de ello.

Finalmente, una vez que tengas el "handle" del control deseado le mandas el mensaje WM_NETXDLGCTL a la ventana padre para poner el foco.

Vamos a suponer que la aplicación tiene por nombre de clase: "ClaseApp" y que estás buscando un control de edición. Normalmente la clase de estos controles es "EDIT". Supongamos que es el cuarto control. El código sería como sigue:

Código:
var
  Parent: HWnd;
  Child: HWnd;

begin
  Parent := FindWindow('ClaseApp', nil);
  if Parent <> 0 then
  begin
    Child := FindWindowEx(Parent, 0, 'EDIT', nil);
    Child := FindWindowEx(Parent, chldHandle, 'EDIT', nil);
    Child := FindWindowEx(Parent, chldHandle, 'EDIT', nil);
    Child := FindWindowEx(Parent, chldHandle, 'EDIT', nil);

    SendMessage(Parent, WM_NEXTDLGCTL, chldHandle, 1);
  end;
end;
Por supuesto la cuestión se complica un poco si el control deseado no es hijo directo de la ventana padre (por ejemplo si está dentro de un panel). En tal caso deberás usar un extra FindWindowEx para encontrar el control intermedio y usar ese como padre.

Nota En la prueba que hice los controles los va hallando en orden inverso al orden de tabulación, pero bastará seguir dicho orden.

// Saludos
Responder Con Cita
  #3  
Antiguo 20-10-2003
JulioCesarPauli JulioCesarPauli is offline
Registrado
 
Registrado: ago 2003
Posts: 4
Poder: 0
JulioCesarPauli Va por buen camino
Mil gracias por tu ayuda
Todo un rollo localizar la ventana

P.D. disculpa por tardar en responder, ando metido en otros rollos
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


La franja horaria es GMT +2. Ahora son las 03:21:23.


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