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
  #21  
Antiguo 25-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
No me parece mucho más complicado de lo que acabamos de hacer, si eres capaz de hacerlo todo sólo mediante teclado.

Lo más inmediato que se me ocurre es contar el nº de veces que pulsas "tab" para llegar a los edits que quieres completar y "escribir" lo que quieras. Lo mismo para llegar a los botones y "escribir" un "enter".
Lo difícil será presionar la imagen esa de "Communication Settings" si no puedes llegar a ella con acceso rápido o con tabulaciones.

Tal vez una solución más "elegante" (no la he probado,sólo teórica) sería usar la función GetWindow con parámetros GW_CHILD y GW_HWNDNEXT e ir probando hasta que dieses con el Edit en cuestión (NOTA: los edit se tratan como ventanas hijas de la ventana principal). He llegado a esta conclusión haciendo pruebas con ele Notepad y viendo que la ventana padre (FindWindow (NULL,"Unbenannt - Editor") tiene dos hijos (doy por sentado, sin probarlo, que serían el menú y el edit) y que por eso esta función te permitía escribir en la "ventana Edit" FindWindowEx(wnd,0,"Edit",NULL); , que realmente es un Edit y no un Window. NO ESTOY SEGURO DE ESTO ÚLTIMO.

La solución de las tabulaciones seguro que es infinitamente más sencilla que la otra....

Un saludo,
LoPiTaL
Responder Con Cita
  #22  
Antiguo 25-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Ya me acordé que ese programa que leía los Handles de otros programas lo tenía grabado en mi Flash. Aqui les adjunto.
Saludos.
Abel
Archivos Adjuntos
Tipo de Archivo: zip WinCtrl.zip (8,9 KB, 36 visitas)
Responder Con Cita
  #23  
Antiguo 25-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Cita:
Empezado por LoPiTaL Ver Mensaje
La solución de las tabulaciones seguro que es infinitamente más sencilla que la otra....

Un saludo,
LoPiTaL
tambien había pensado en lo mismo, lo probaré mas tarde.
Me olvidaba, si haces correr el WinCtrl, en la parte de abajo al medio, hay un cuadrito que tienes que marcarlo, sinó no puedes hacer nada. Eso solo te indica que lo que vayas a hacer es tu responsabilidad (está todo en alemán).
Tambien tengo el código de este programa, pero muchas cosas no lo entendí. Como te darás cuenta, con este puedes manipular otras aplicaciones.
Saludos.
Abel.
Responder Con Cita
  #24  
Antiguo 26-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Es interesante el programa este, no soy capaz de hacer gran cosa con él, pero demuestra que se puede acceder a todas las "ventanas" de una aplicación, como ya te había comentado, tanto a los edits como a los forms, etc... y de hecho si utilizas el botón ese de "Send Command" a cualquiera de ellos lo que hace es cambiarle el texto, ya sea el Caption en los labels, forms, etc... o el Text en los Edits... Lo malo es que no todas las "ventanas" tienen nombre (o al menos no aparece), entonces no sabes realmente a cuál de ellas le estás mandando cosas si no vas probando... y claro, tal y como te avisa la aplicación, "es tu responsabilidad"

Un saludo,
LoPiTaL
Responder Con Cita
  #25  
Antiguo 26-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
estuve haciendo experimentos y no logro meter la ruta en la ventana "Abrir". Esto es lo que hice:
char s[200]="O:\\NU\\Projects\\FuA\\CC_EL\\Centerdaten\\ECU_Test\\Projects\\DQ200_G2\\Tools\\EcuFlashTool\\Flas hMonitorEOL\\DQ200G2_Flash_Monitor_EOL.ini";

wnd = FindWindow (NULL,"ECU Flash Tool");
BringWindowToTop(wnd);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(0x4F, 0, 0, 0);
keybd_event(0x4F, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

wnd = FindWindow (NULL,"Open File");
BringWindowToTop(wnd);

for( i= 0;i<= strlen(s);i++)
{
keybd_event((int)s[i], 0, 0, 0);
keybd_event((int)s[i], 0, KEYEVENTF_KEYUP, 0);
}

el problema es que los signos ":" y "\" no los quiere escribir. Tienes alguna idea de cómo añado estos signos?
Saludos.
Abel.
Responder Con Cita
  #26  
Antiguo 26-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Hola a todos,podría por favor alguien traducirme esto a C, yo me hice un rollo y no me resulta.
Gracias de antemano.
Abel.
procedure Keyb_Event(C: CHAR);
var S: WORD;
begin S:= VkKeyScan(C);
if(S and $0100) <> 0 then keybd_event(VK_SHIFT,0,0,0);
if(S and $0200) <> 0 then keybd_event(VK_LCONTROL,0,0,0);
if(S and $0400) <> 0 then keybd_event(VK_LMENU,0,0,0);
keybd_event(S,0,0,0);
keybd_event(S,0,KEYEVENTF_KEYUP,0);
if(S and $0100) <> 0 then keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0); i
f(S and $0200) <> 0 then keybd_event(VK_LCONTROL,0,KEYEVENTF_KEYUP,0);
if(S and $0200) <> 0 then keybd_event(VK_LMENU,0,KEYEVENTF_KEYUP,0);
end;
Responder Con Cita
  #27  
Antiguo 26-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Cita:
Empezado por oabel5 Ver Mensaje
estuve haciendo experimentos y no logro meter la ruta en la ventana "Abrir". Esto es lo que hice:
char s[200]="O:\\NU\\Projects\\FuA\\CC_EL\\Centerdaten\\ECU_Test\\Projects\\DQ200_G2\\Tools\\EcuFlashTool\\Flas hMonitorEOL\\DQ200G2_Flash_Monitor_EOL.ini";

wnd = FindWindow (NULL,"ECU Flash Tool");
BringWindowToTop(wnd);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(0x4F, 0, 0, 0);
keybd_event(0x4F, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

wnd = FindWindow (NULL,"Open File");
BringWindowToTop(wnd);

for( i= 0;i<= strlen(s);i++)
{
keybd_event((int)s[i], 0, 0, 0);
keybd_event((int)s[i], 0, KEYEVENTF_KEYUP, 0);
}

el problema es que los signos ":" y "\" no los quiere escribir. Tienes alguna idea de cómo añado estos signos?
Saludos.
Abel.
Es bastante sencillo si utilizas la función VkKeyScan: esta devuelve qué valor tienes que pasarle al keybd_event para escribir el caracter que quieras, así como el estado del shift, ctrl, alt, etc... Te pongo un ejemplo:

Código Delphi [-]
var
  auxWord: Word;
  auxChar: byte;
begin
  laStr:='C:\HOLA\HOLA2';

  //Para todos los chars
  for I := 1 to length(laStr) do begin
      auxWord:=VkKeyScan(laStr[i]);  //Escaneamos el char en concreto
     
     //Según la ayuda de la función, en el byte menos significativo tenemos
     //el valor del char a pasarle a keybd_event, y en el byte más significativo
    //tenemos el estado del shift, ctrl y alt. NO distingue entre alt, ctrl, shift 
    //izdos y drchos, pero dado que no puede ser el alt izdo (si no, no escribiría
    //nada, pongo el derecho (de ahí que sea VK_RMENU y no VK_MENU)).

      auxChar:=(auxWord and $FF);

      if (auxWord and $100)<>0 then
        keybd_event(VK_SHIFT, 0, 0, 0)
      else if (auxWord and $400)<>0 then
        keybd_event(VK_RMENU, 0, 0, 0);

      keybd_event(auxChar, 0, 0, 0);
      keybd_event(auxChar, 0, KEYEVENTF_KEYUP, 0);

      if (auxWord and $100)<>0 then
        keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0)
      else if (auxWord and $400)<>0 then
        keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0);
  end;

  //Finalmente pulsamos enter:
  keybd_event(VK_RETURN, 0, 0, 0);
  keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

A mí me ha funcionado a la perfección.

Un saludo,
LoPiTaL
Responder Con Cita
  #28  
Antiguo 26-05-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por oabel5 Ver Mensaje
Hola a todos,podría por favor alguien traducirme esto a C...
Esa función la escribí yo para resolver la duda que ahora presentas y ya la traduje aquí. El problema es que con keybd_event no se pueden simular caracteres conseguidos con teclas modificadoras como AltGr (Ctl+Alt). Por ese motivo escribí una nueva versión que ahora te vuelvo a presentar:
Código:
// El parámetro C es el carácter que queremos escribir.
Keyb_Event(char C)
{
   WORD S =  VkKeyScan(C);
   if(S & 0x0100)  keybd_event(VK_SHIFT,0,0,0);
   if(S & 0x0200)  keybd_event(VK_LCONTROL,0,0,0);
   if(S & 0x0400)  keybd_event(VK_LMENU,0,0,0);

   keybd_event(S,0,0,0);
   keybd_event(S,0,KEYEVENTF_KEYUP,0);

   if(S & 0x0100)  keybd_event(VK_SHIFT,0,KEYEVENTF_KEYUP,0);
   if(S & 0x0200)  keybd_event(VK_LCONTROL,0,KEYEVENTF_KEYUP,0);
   if(S & 0x0400)  keybd_event(VK_LMENU,0,KEYEVENTF_KEYUP,0);

}
Saludos.

Última edición por escafandra fecha: 26-05-2010 a las 15:36:37.
Responder Con Cita
  #29  
Antiguo 26-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
Esa función la escribí yo para resolver la duda que ahora presentas y ya la traduje aquí. El problema es que con keybd_event no se pueden simular caracteres conseguidos con teclas modificadoras como AltGr (Ctl+Alt). Por ese motivo escribí una nueva versión que ahora te vuelvo
Saludos.
Si, justamente de casualidad lo encontré en otro hilo donde habías colocado ese código hace nueve días creo.
Justamente a mi no me resultaban esos Caracteres: ":", especialmente el "\", pero ahora implementé tu código a mi programa y .... por fin.
Muchas gracias por vuestro tiempo y las respuestas.
Esta tarde seguiré implementando mi programa, mi siguiente desafío es hacer que de alguna forma tengo que simular que presiono con el ratón en el "Communication Settings" (pueden ver el PDF que adjunté antes). La idea que me dió LoPiTal sobre usar el TAB varias veces hasta encontrar este ícono, en este caso no resulta ; solo se puede acceder a esa ventana usando el ratón. Talvez ustedes tienen otra idea, les agradecería.
Saludos
Abel.
Responder Con Cita
  #30  
Antiguo 26-05-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Revisa esto.

Saludos.
Responder Con Cita
  #31  
Antiguo 27-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Hola Escafandra,
lo acabo de probar y funciona, gracias por ese aporte.
Ahora realizaré lo demas que ya no es problema.
Saludos desde Berlin.
Abel
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
Acceder a una aplicación externa FDB Varios 3 22-01-2008 13:45:02
Aplicacion externa a c++ alloger C++ Builder 1 28-10-2006 00:37:09
Manipular una aplicacion externa lookmydoom API de Windows 2 09-08-2006 22:22:52
Ejecutar comandos en aplicación externa José Craviotto Varios 1 03-02-2006 13:21:28
Ejecutar aplicación externa taita API de Windows 4 06-08-2005 23:45:57


La franja horaria es GMT +2. Ahora son las 14:27: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