Problemas con ShellExecute
Hola
Tengo un problema con ShellExecute que no se cómo pillarlo. La cuestión es que tengo que lanzar 2 app externas y posicionarlas en pantalla de forma que se vean las 2. Para hacerlo, lanzo la siguiente función 2 veces, una para cada app: Código:
HWND __fastcall TStep3::EjecApp(AnsiString aFile,bool Wait) Bien, la cuestión es que si le digo que no necesito handle, ShellExecute funciona siempre, pero si le digo que me lo devuelva (para poder posicionar una ventana lo necesito para la función SetWindowPos) ShellExecute deja de funciuonar hasta reiniciar el programa. Está claro que el error está en esta función, pero no llego a alcanzar a ver el por qué. Os pongo la función: Código:
HWND __fastcall TStep3::LocatedWindows(AnsiString aTitle) Alguna idea? Gracias |
Lo que no comprendo es como puedes llamar a una funcion con 2 argumentos, habiendo sido declarada solo con uno (LocatedWindows)! te dejo un ejemplo un poco distinto y un poco mas "correcto", pues GetWindow te puede retornar el manejador de una insancia anteriormente creada de la misma aplicacion.
Código:
int __stdcall EnumProc(void * hWnd, long lParam) |
Hola
Cita:
Me limité a hacer una limpieza de las funciones para quitar el código que no tenía nada que ver con el problema y se me pasó quitar ese parámetro :) Referente al código que me planteas..... Si entiendo bien la ayuda del MSDN, EnumThreadWindows te ejecutará una función callback tantas veces como ventanas no-hijas tenga la aplicación lanzada o creada mediante CreateProcessA, ¿es eso correcto? Y la función WaitForInputIdle espera a que la aplicación lanzada esté totalmente cargada (o al menos la ventana principal), ¿también es esto correcto? Si es así, tu solución la veo, no se si mejor o peor, pero sí más "limpia" Gracias por la respuesta |
Cita:
Cita:
Cita:
en busca de un texto en su título o su clase, pero pueden existir N instancias de una aplicacion y por ende N ventanas de la misma clase y muy probablemente tambien con el mismo título. Entonces no hay forma de asegurar mediante GetWindow, FindWindow o parecidos, que la instancia encontrada sea la que tu creaste. Es por ello que uso y aconsejo usar CreateProcess pues retorna los identificacodres del proceso e hilo principal (y en algunas ocaciones ShellExecuteEx pues tambien retorna informacion propia del proceso creado.) Cita:
|
La franja horaria es GMT +2. Ahora son las 18:58: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