FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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:
Código PHP:
Código PHP:
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 |
#2
|
|||
|
|||
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 |
#3
|
|||
|
|||
Hola LoPiTal,
gracias por la respuesta, pero lamentablemente la idea que tienes ya la realicé y asi tampoco funciona. Saludos. Abel. |
#5
|
||||
|
||||
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. |
#6
|
|||
|
|||
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 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 |
|
|
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 |
|