Saber que programas están en la barra de tareas

¿Hola, qué tal?. Quisiera saber si hay alguna manera que saber que programas se encuentran ejecutándose minimizados en la varar de tareas, lo que pasa es que tengo un programa hecho en foxpro que hace eso, minimizarse en la barra de tareas y en si lo que quiero es evitar que el programa se ejecute más de una vez en el equipo, lo que se me ocurre es alguna rutiza para saber si el programa se encuentra minimizado ya en la barra (ejecuntándose) para entonces no abrirlo nuevamente, ¿me explico?. Espero que si, ojalá me puedan ayudar.
Saludos y gracias de antemano.

2 Respuestas

Respuesta
1
La forma más sencilla de hacerlo es crea una tabla "opened" y abrila en modo exclusivo desde tu programa principal(el programa esta en negrita en tu proyecto de fox) así:
Use opened exclusive
O así
Use exclusive opened
Al intentar abrir de nuevo te dará error y decile a fox si no puede abrir esta tabla:
if !use("opened")
Close all
Clear events
Quit
Endif
Y tu programa no se abrirá más de una vez
no es muy profesional el método pero funciona sin complicarte la vida
Muchas gracias por tu ayuda, pero creo que esta opción no se puede aplicar en modo multiusuario, ¿verdad?. Lo que pasa es que el sistema que realicé lo ocupan un poco más de 100 personas y no puedo abrir una tabla en modo expclusivo y dejar a los demás sin poderlo abrir.
Podes utilizar este código en tu programa principal:
Private sFormCaption
DECLARE INTEGER FindWindow IN user32 string @Class, string @titre
sFormCaption = "MyApplication"
IF FindWindow(0, sFormCaption) != 0
QUIT
Endif
Este código también funciona:
LOCAL awin_apps, vfp_handle, ln_current_window,ln_window_count
DIMENSION awin_apps[1]
vfp_handle=0
DECLARE INTEGER FindWindow ;
IN win32api ;
INTEGER nullpointer, ;
STRING cwindow_name
DECLARE INTEGER GetWindow ;
IN win32api ;
INTEGER ncurr_window_handle, ;
INTEGER ndirection
DECLARE INTEGER GetWindowText ;
IN win32api ;
INTEGER n_win_handle, ;
STRING @ cwindow_title, ;
INTEGER ntitle_length
vfp_handle=findwindow(0,_SCREEN.CAPTION)
ln_current_window=vfp_handle
ln_window_count=0
DO WHILE ln_current_window>0
lc_window_title=SPACE(255)
ln_length=getwindowtext(ln_current_window, ;
@lc_window_title,LEN(lc_window_title))
IF ln_length>0
lc_window_title=STRTRAN(TRIM(lc_window_title),CHR(0),"")
ELSE
lc_window_title=""
ENDIF
IF ln_current_window>0 .AND. !EMPTY(lc_window_title)
* Increment the window count and re-dimension the array of running
* applications
ln_window_count=ln_window_count+1
DIMENSION awin_apps(ln_window_count)
awin_apps[ln_Window_Count]=lc_window_title
ENDIF
* Call to GetWindow to fetch handle of running applications.
ln_current_window=getwindow(ln_current_window,2)
ENDDO
CREATE TABLE runapps (appname m)
IF ALEN(awin_apps,1)>0
SELECT runapps
APPEND BLANK
FOR i=1 TO ALEN(awin_apps,1)
REPLACE appname WITH awin_apps+CHR(13) ADDITIVE
NEXT
ENDIF
MODIFY MEMO appname NOEDIT
Muvhas gracias por tu ayuda, probaré el código, espero que sirva a pesar de que no hay ventana a la vista, puesto que como expliqué al minimizarlo, se minimiza pero en la barra de tareas. Mil gracias!.
Respuesta
1
Usa la siguiente función
Declare integer FindWindow in user32 string, string
ventana=Findwindow(0,"Nombre de la Ventana")
IF ventana&gt0
MESSAGEBOX("No se puede ejecutar más de una sesión del programa.")
quit
Endif

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas