![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Hola LoPiTal,
gracias por la respuesta, pero lamentablemente la idea que tienes ya la realicé y asi tampoco funciona. Saludos. Abel. |
|
#3
|
||||
|
||||
|
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. |
|
#4
|
|||
|
|||
|
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 |
|
#5
|
|||
|
|||
|
Hola escafandra,
gracias por la respuesta a mis preguntas. Como indiqué, mi objetivo es escribir un programa, desde el cual llamar a otra aplicación y desde mi programa manipular esa otra aplicación. Con el keybd_event(...) no puedo solucionar este problema, ya que de alguna forma tengo que indicar a mi programa el Handle de lo ventana de la otra aplicación y eso no me imagino como hacerlo con el keybd_event(...). Lo que talvez no me expliqué bien, es que en realidad el programa que estoy escribiendo tiene que llamar a otra aplicación que no es el NotePad.exe. Solamente era un ejemplo eso lo del NotePad, para que me entiendan mejor. Como indiqué a la final mi programa no solo tiene que abrir un archivo en la otra aplicación, sinó tiene que hacer otras rutinas mas, por ejemplo presionar algunos botones cuando este lo pide. Hola LoPiTal, a ti tambien te agradezco por tu respuesta. El código que escribí tambien corrió en mi PC, solo que yo tengo el Windows XP en alemán, por eso a mi me salía: FindWindow (nil,'Unbenannt - Editor'); el problema consiste en que yo no quiero abrir la ventana "Abrir" de esta forma: PostMessage(wnd, WM_COMMAND,HIWORD(1)+2,0);// lo quiero abrir simulando presionar las teclas: Ctrl + 'o'. Como indico nuevamente, la otra aplicación que quiero manipular desde mi programa, no es el NotePad (ese solo era un ejemplo). En esta otra aplicación la ventana "Abrir" reacciona cuando se presiona esas dos teclas: Ctrl + 'o', mi problema consiste en que no sé como enviar un mensaje haciendo esa combinación de teclas. Saludos. Abel |
|
#7
|
||||
|
||||
|
La función que propongo simula cualquier pulsación en el teclado, sólo tienes que tener el foco en la ventana que quieras que reciba las pulsaciones. FindWindow te devuelve el Handle de la ventana que buscas, pues lo usas luego con SetFocus para darle el foco y ya lo tienes.
Saludos. |
|
#8
|
|||
|
|||
|
Es verdad! Que al probar copié también la instrucción
PostMessage(wnd, WM_COMMAND,HIWORD(1)+2,0);//Con esto abro la ventana "Abrir" del NotePad ![]() Lo siento, jejeje se me pasó. Voy a seguir probando, que me ha dado curiosidad. Un saludo, LoPiTaL |
|
#9
|
|||
|
|||
|
Bueno, como te he dicho sentía curiosidad. escafandra tenía razón, sólo que no basta con darle el foco (Windows.SetFocus no me funcionaba
). He tenido que hacer BringWindowToTop. Además no me funciona ni en el evento OnCreate ni en el OnShow del form, sino que he tenido que hacerlo en un timer (de 1 ms claro).El código:
Pruébalo a ver qué tal y nos dices. PD: Si alguien puede explicar por qué el postmessage y sendmessage no funcionan se agradecería. Un saludo, LoPiTaL |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|