RE:Relanzar aplicaciones
Publicado por
J.Bochs (1 intervención) el 04/02/2001 22:15:23
Mi trabajo me ha costado pero entre unos y otros lo he conseguido, se trata de evitar relanzar una aplicación cuando ya está abierta una instancia de esta, es decir, si no está abierta ninguna instancia de la aplicación a la que se llama la abre y si existe alguna abierta, la hace visible y le da el foco.
Se trata de recuperar la ruta de los programas que se tienen en ejecución con las funciones del API 'Process32First' y 'Process32Next', después de abrir un snapshot de los procesos en ejecución con 'CreateToolhelp32Snapshot'. Seguidamente compara la ruta de cada programa que recupera del snapshot con la ruta del programa que estás a punto de ejecutarse.
Cuando acabes con el snapshot hay que cerrarlo con 'CloseHandle'.
Si resulta que ya está en ejecución, hay que obtener el identificador de
ventana a partir del identificador del proceso y mostrarla.
La función a la que tienes que llamar es 'Lanzar_Aplicacion', pasando como parámetro la ruta de
la aplicación que quieres lanzar, y ella se encarga de ejecutarla con 'Shell' o de mostrarla si ya está en ejecución.
En un módulo BAS
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32.dll" (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32.dll" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32.dll" (ByVal hSnapshot As Long, lppe As PROCESSENTRY32) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassN