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 de aldob
1
1
aldob, Ingeniero en Sistemas con amplia experiencia en desarrollo de...
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