Esto lo encontre por ahí, tenia un ejemplo mas simple, pero no lo encuentro. espero te sirba.
Si te es muy complicado, busca en la API "FindWindows"
LOCAL llRet, lcCaption, lExact
lExact = SET("Exact")
SET Exact on
llRet = .F.
lcCaption = _SCREEN.Caption
*--- Renombra temporalmente el caption de la app
_SCREEN.Caption = "_" + lcCaption
IF IsActive(lcCaption)
*--- Si ya esta activo
MESSAGEBOX("La Aplicación: ("+Trim(lcCaption) +") ya está
activa",16+4096,"Aviso")
llRet = .T.
ENDIF
_SCREEN.Caption = lcCaption
SET Exact &lExact
RETURN llRet
*ENDFUNC
FUNCTION IsActive(tcCaption)
DECLARE INTEGER FindWindow IN WIN32API ;
STRING cNULL, ;
STRING cWinName
RETURN FindWindow(0, tcCaption) # 0
ENDFUNC
Esta es una función que le podés poner YAActiva y así si devuelve .T.
es que la aplicación ya está en uso. Yo lo utilizo para evitar que se
ejecute más de una vez el sistema en una pc