No abrir el programa nuevamente

Tengo mi ejecutable de un programa creado en power builder el cual tiene un acceso directo en mi escritorio al hacerle doble click obviamente se abre, lo que necesito es que al hacerle doble click por segunda vez no se vuelva a abrir y arroje un mensaje de "el programa ya se encuentra en ejecución" o algo así. Si me puedes ayudar te lo agradecería mucho.

1 respuesta

Respuesta
1
Tenés que usar una serie de apis. Te paso el código de un objeto de usuario que cree que contiene la lógica necesaria. Impórtalo y después en el open de la aplicación instancialo y llama al método aplicacion_abierta. Lo que hace es buscar la ventana principal por el titulo y si la encuentra la trae al frente, sino abre la aplicación.
Si quedan dudas escribí, el código esta más abajo.
Saludos
AldoB
Por favor cerrá la pregunta
$PBExportHeader$uo_aplicacion_api.sru
$PBExportComments$Objeto para validar que la aplicación solo se abra una vez por PC
forward
global type uo_aplicacion_api from nonvisualobject
end type
end forward
global type uo_aplicacion_api from nonvisualobject
end type
global uo_aplicacion_api uo_aplicacion_api
type prototypes
FUNCTION boolean ShowWindow( ulong winhandle, int wincommand) Library "user32"
FUNCTION boolean BringWindowToTop( ulong HWND ) Library "user32"
FUNCTION long FindWindowA( ulong winhandle,string wintitle) Library "user32"
end prototypes
forward prototypes
public function long uof_buscar_ventana (string ae_nombre_ventana)
public function boolean uof_mostrar_ventana (unsignedlong ae_winhandle)
public function boolean uof_traer_adelante (unsignedlong ae_winhandle)
public function boolean uof_aplicacion_abierta (string ae_nombre_ventana)
end prototypes
public function long uof_buscar_ventana (string ae_nombre_ventana);//busca si la ventana con el nombre ae_nombre_ventana está
//abierta dentro del entorno de windows
//retorna un long > 0 si se encuentra
return FindWindowA(0,ae_nombre_ventana)
end function
public function boolean uof_mostrar_ventana (unsignedlong ae_winhandle);return ShowWindow(ae_winhandle, 3)
end function
public function boolean uof_traer_adelante (unsignedlong ae_winhandle);return BringWindowToTop( ae_winhandle )
end function
public function boolean uof_aplicacion_abierta (string ae_nombre_ventana);// Verifica si la ventana de la aplicacion con el nombre ae_nombre_ventana esta abierta
// dentra del entorna de windows
// si está abierta, la muestra adelante de todas las demás y retorna TRUE
// sino devuelve FALSE
Long ll_winhandle
ll_winhandle = this.uof_buscar_ventana(ae_nombre_ventana)
IF ll_winhandle > 0 THEN
this.uof_traer_adelante( ll_winhandle )
this.uof_mostrar_ventana( ll_winhandle )
return TRUE
END IF
return FALSE
end function
on uo_aplicacion_api.create
TriggerEvent( this, "constructor" )
end on
on uo_aplicacion_api.destroy
TriggerEvent( this, "destructor" )
end on

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas