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 18-09-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Acceder al menú de una aplicación externa

Hola a todos,
Desde hace ya algún tiempo intento acceder al menú de una aplicación externa desde la mía (Google Earth en este caso). Si habeis leído algunos de mis post habreis comprobado que llevo ya algún tiempo intentando esto bien con mensajes (SendMessage) que no he logrado manejar o bien con otros intentos. Lo último que se me ha ocurrido, pero que no sé si se puede hacer es intentar acceder al menú de otra aplicación desde la mía. Si es posible me gustaría que me dijéseis como hacerlo y si no es demasiada molestia algún ejemplo.

Muchas gracias por vuestra ayuda!!!
Responder Con Cita
  #2  
Antiguo 18-09-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Investigando un poco sobre el asunto he dado con un ejemplo que soluciona esto enviando un mensaje WM_COMMAND al notepad en este caso y funciona. El ejemplo necesita de tan solo un botón cuyo evento debe ser:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject); 
var 
wnd: HWND; 
begin 
winexec('notepad',SW_SHOW); 
wnd := FindWindow('notepad', nil); 
PostMessage(wnd,WM_COMMAND, hiword(1)+2,0); 
end;
Con este ejemplo se abre el notepad y se simula un click en el item Abrir del menú Archivo.
El ejemplo lo he encontrado aquí.
La cosa es q he intentado lo mismo con el Google Earth y no he podido... si alguien se atreve que me comente el resultado por favor.
Salu2...

Última edición por vejerf fecha: 18-09-2008 a las 16:04:06. Razón: Cometí un error en el hipervínculo que ya he corregido
Responder Con Cita
  #3  
Antiguo 18-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
vejeref; no por abrir 50 hilos va a haber mayor atencion en tu problema, por favor ya no lo hagas que no es correcto. Se muy bien que es algo frustrante no conseguir los resultados esperados pero debes tener paciencia, si nadie te contesta puedes "revivir" el hilo que comenzaste.

Lamento no haberte dado más soluciones pero recien en un post anterior me he podido percatar de mi problema de vista... habiendo tambien descargado el Google Earth podremos hablar el mismo idioma, aqui una idea;

Código Delphi [-]
uses Windows, Messages, ActiveX, ComObj;
 
var
 ge: OleVariant;
 hWnd: Integer;
 
begin
 CoInitialize(nil);
 ge := CreateOleObject('GoogleEarth.ApplicationGE');
 hWnd := ge.GetMainHwnd;
 
 keybd_event(VK_MENU, 0, 0, 0);
 keybd_event(VK_CONTROL, 0, 0, 0);
 Sleep(64); SendMessage(hWnd, WM_CHAR, Ord('B'), 0);
 keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);
 keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0);
end.

PD; a futuro incluye snapshots para ver lo que quieres hacer.

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #4  
Antiguo 19-09-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Hola cHackAll,
Lo primero pedir disculpas por no haber cumplido estrictamente las normas del foro y lo segundo darte las gracias por tu ayuda. Parece que con el método que me propones sí es posible hacer lo que yo pretendía. Por ponerle algún pero, he tenido que modificar el tiempo del Sleep porque con ese tiempo parece que mi procesador no era capaz de reaccionar a tiempo y simplemente me escribía una 'B'. Supongo que con esto tengo solucionado el poder enviar teclas de control a la aplicación, pero si un item de un menú no tiene accesos rápidos asociados que se puede hacer.
Ahí dejo la pregunta por si alguien encuentra alguna solución. Yo mientras tanto voy a usar la solución de cHackAll y seguiré investigando a ver que encuentro.
De nuevo muchas gracias a todos!!!

PD: a futuro incluiré un snapshot... pero antes tendré que averiguar que es :s... por el contexto creo que puede ser una captura de pantalla, pero no estoy seguro...

Última edición por vejerf fecha: 19-09-2008 a las 12:41:16.
Responder Con Cita
  #5  
Antiguo 29-09-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Un problemilla más...

Hola,
Ahora tengo un problema de funcionamiento con el Google Earth. Mi aplicación digamos que es un sistema de posicionamiento en el que uso el Google Earth como cartografía. Entonces voy poniendo "puntitos" allí donde me indiquen. La cosa es que actualizo la posición de ese "puntito" recargando un fichero. Para recargar este fichero uso una combinación de teclas "Ctrl+R", entonces cada vez que recibo una nueva posición, modifico ese fichero, lo cargo en el Google Earth por medio de una función del API de GE y, por último, envío la secuencia "Ctrl+R" como se explican en los mensajes anteriores. Pues bien, esto me funciona perfectamente en un portatil, sin embargo, en otro portátil no me funciona. Es como si ahí no reconociera el comando "Ctrl+R" que se le envía. Sin embargo si pincho en el item "Actualizar" del menú "Editar" de Google Earth se actualiza bien el fichero. ¿Alguna idea de por qué puede esto funcionar en unos sitios y en otros no?
Gracias...
Responder Con Cita
  #6  
Antiguo 29-09-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Cita:
Empezado por vejerf Ver Mensaje
¿Alguna idea de por qué puede esto funcionar en unos sitios y en otros no?
Bueno, si estas utilizando la funcion que te di, muy probablemente el tiempo de de "repozo" no sea suficiente en algunas PCs, talvez una alternativa sea utilizar F5 (por ejemplo) que muy probablemente refresque tambien la informacion sin la necesidad de intervencion de dicha API.

Por ahora solo puedo decir eso, aunque revisare en unas horas que puede estar pasando

Saludos
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #7  
Antiguo 01-10-2008
vejerf vejerf is offline
Miembro
 
Registrado: ene 2007
Posts: 206
Poder: 18
vejerf Va por buen camino
Hola de nuevo cHackAll,
ya conseguí hacerlo funcionar en el otro portatil. No sé exactamente el por qué del fallo, pero creo q era porque no obtenía el handle correcto de la ventana. La cosa es q ahora me funciona.
De todas formas, si sabes alguna manera de acceder al menú de google earth, pero sin usar las teclas de acceso rápido me gustaría me lo comentases.
De todas formas un millón de gracias...
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 aplicación externa taita API de Windows 4 06-08-2005 23:45:57
conocer datos aplicacion externa Igna API de Windows 2 24-06-2004 09:12:53


La franja horaria es GMT +2. Ahora son las 19:51:09.


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