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 23-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Manipular aplicación externa

Hola,
yo no programo en Delphi (lo hago en C) sin embargo me atreví a hacer una consulta en este foro, porque lamentablemente en los foros de C no encontré solución a mi problema. Ademas me dí cuenta que en este Foro tienen mucho mas material acerca de la problematica que voy a plantear.
Desde ya les agradezco a todos por su atención y por toda respuesta que me puedan dar .
Uso el LabWindows, en el que puedo programar en C, pero no en C++.
Necesito escribir un programa, el cual me abra otro y desde mi programa poder manipular a ese otro. Un ejemplo mas claro:
Mi programa arranca, abre el NotePad.exe; desde mi programa le indico que vaya a "File" y abra la opción "Abrir". Hice lo siguiente:
Código PHP:
HWND wnd
PROCESS_INFORMATION pi = {0}; 
STARTUPINFO si = {sizeof(si)}; 

CreateProcess(NULL"notepad.exe"NULLNULLFALSE0NULL,NULL, &si, &pi); 
wnd FindWindow (NULL,"Unbenannt - Editor"); //encuentra la nueva ventana 
PostMessage(wndWM_COMMAND,HIWORD(1)+2,0);//Con esto abro la ventana "Abrir" del NotePad
wnd FindWindowEx(wnd,0,"Edit",NULL); 
for( 
i1;i<= 10;i++) 
SendMessage(wndWM_CHAR48 0);  //escribe en NotePad diez veces "0" 
Mi pregunta es, cómo logro abrir la ventana "Abrir" indicandole desde mi programa que se simule apretar las teclas: Ctrl + 'O', mas o menos había pensado en esto:
Código PHP:
 PostMessage(wndWM_KEYDOWNVK_CONTROL+'O'0); 
pero no funciona, porque el tercer parámetro de PostMessage solo acepta una constante; intente enviar dos PostMessage:
Código PHP:
PostMessage(wndWM_KEYDOWNVK_CONTROL0); 
PostMessage(wndWM_KEYDOWNVK_O0);              // VK_O=0x4F 
pero tampoco funciona.
Talvez se preguntan, porque quiero abrir de otra forma la ventana "Abrir", el problema es que desde mi programa tengo que manipular otro programa que no es el NotePad, osea en ese otro programa no funciona el:
PostMessage(wnd, WM_COMMAND,HIWORD(1)+2,0);
espero puedan ayudarme con este problema, porque despues de eso tengo otras preguntas referidos al caso, de por ejemplo: una vez abierto la ventana "Abrir", cómo puedo incluir una ruta en el espacio donde se pone el nombre del archivo a abrirse, por ejemplo quiero poner ahi: C:\TEST\test.txt
Gracias nuevamente por toda respuesta. Abel
Responder Con Cita
  #2  
Antiguo 23-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Sin tener gran idea de cómo funcionan exactamente los mensajes en Windows, diría que para detectar algo del estilo Ctrl+XXXX debes mandar el evento KeyDown del Ctrl, seguido del KeyDown y KeyUp de la tecla en cuestión.
Es decir, debes hacer keydown del ctrl y KeyPress de la tecla que toque (no sé si realmente existe el evento KeyPress o si se simula lanzando los dos que he citado anteriormente, el KeyDown y el KeyUp).
Para terminar la simulación completa de las pulsaciones del teclado, deberías lanzar el KeyUp del ctrl después de los de la tecla en cuestión.

Si alguien más experimentado que yo puede confirmarlo, se agradecería.

Un saludo,
LoPiTaL
Responder Con Cita
  #3  
Antiguo 23-05-2010
oabel5 oabel5 is offline
Miembro
 
Registrado: feb 2008
Posts: 24
Poder: 0
oabel5 Va por buen camino
Hola LoPiTal,
gracias por la respuesta, pero lamentablemente la idea que tienes ya la realicé y asi tampoco funciona.
Saludos.
Abel.
Responder Con Cita
  #4  
Antiguo 24-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
Porqué no arrancar el notepad pasándole como parámetro el archivo que quieres abrir. Por otro lado puedes consultar esto

Saludos.
Responder Con Cita
  #5  
Antiguo 24-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
Sui lo prefieres en C:
Código:
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.
Responder Con Cita
  #6  
Antiguo 24-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Poder: 16
LoPiTaL Va por buen camino
Tengo que decir que a mí sí que me ha funcionado tu código correctamente, salvo lo del CreateProcess que me daba error y el FindWindow, que he tenido que cambiarle el nombre de la ventana.

He abierto el bloc de notas a parte, y desde Delphi he ejecutado:

Código:
  wnd := FindWindow (nil,'Sin título - Bloc de notas'); //encuentra la nueva ventana
  if wnd=0 then begin
    showmessage('Block de notas no abierto.');
    Exit;
  end;
  PostMessage(wnd, WM_COMMAND,HIWORD(1)+2,0);//Con esto abro la ventana "Abrir" del NotePad
  PostMessage(wnd, WM_KEYDOWN, VK_CONTROL, 0);
  PostMessage(wnd, WM_KEYDOWN, $4F, 0);              // VK_O=0x4F
y me ha abierto la ventana "Abrir" en el bloc de notas. Comprueba que tras el FindWindow wnd es distinto de 0, que con lo que tú habías puesto a mí me salía 0 y por eso los PostMessage parece que no hagan nada.
La de CreateProcess no me funcionaba porque no he inicializado si y pi, y la verdad no sabía cómo hacerlo

Ya comentas algo.

Un saludo,
LoPiTaL
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 15:19:59.


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