Hola Gente !
De que manera puedo listar o ver todas las terminales que están utilizando el programa simultaneamente ?
//----------------------------------------------------------------
//USUARIOS CONECTADOS
//----------------------------------------------------------------
//----------------------//Ctrl usuarios activos en este programa
Function UserLogging(lNew)
local cDirUserLog := cPathDef+"\USERSLOG"
local cUserLog, cIP:= GetIPs("LOCAL")
local cEquipo:=NetName(.f.), cUserWin:=NetName(.t.), cAccess
local nHand, FO_SHARED := 64
If !lIsDir(cDirUserLog) //creamos el sub-dir
lMkDir(cDirUserLog)
Endif
cUserLog := cDirUserLog+"\"+Substr(cNombUser,1,12)+cEquipo+".log"
if cPermiso = "T"
cAccess := "Acceso Total"
elseif cPermiso = "M"
cAccess := "Editar"
elseif cPermiso = "L"
cAccess := "Solo lectura"
endif
If lNew //Entrando
nHand := FCreate( cUserLog )
FWrite(nHand, cNombUser + CRLF+; //usuario del programa
cAccess + CRLF+; //nivel de acceso
cEquipo + CRLF+; //nombre del equipo
cIP + CRLF+; //IP del equipo
GroupDomain() + CRLF+; //Grupo de trabajo o dominio
cUserWin + CRLF+"") //usuario de Windows
FClose(nHand)
//Lo abrimos en modo shared. (nHandUserLog es static)
//Cuando se requiere ver los conectados al programa, se trata de abrir en exclusivo,
//y si no se puede, es que el usuario esta conectado al programa. (Ver ShowConnectedUsers())
nHandUserLog := FOpen( cUserLog, FO_SHARED ) // abrimos el fichero compartido
Else //Saliendo
FClose(nHandUserLog)
Ferase(cUserLog)
Endif
Return nil
/* --------------------------------------------------------------------
//Fileio.ch
OPEN MODES:
FO_READ 0 Open file for reading
FO_WRITE 1 Open file for writing
FO_READWRITE 2 Open file for reading and writing
SHARING MODES:
FO_COMPAT 0 Compatibility mode
FO_EXCLUSIVE 16 Exclusive use
FO_DENYWRITE 32 Prevent other applications from writing
FO_DENYREAD 48 Prevent other applications from reading
FO_DENYNONE 64 Allow others to read or write
FO_SHARED 64 Same as FO_DENYNONE
-------------------------------------------------------------------- */
//----------------------//Mostrar usuarios activos en este programa
Function ShowConnectedUsers()
local cDirUserLog := cPathDef+"\USERSLOG"
local aDir := DIRECTORY(cDirUserLog + "\*.*", )
local nHand, aActiveUsers:={}, cLogText, cFich
local cUserName,cAccess,cComputName,cIP,cGrpDomm,cWinUser
local FO_EXCLUSIVE:=16
AEVAL( aDir, {|aFich| cFich:=cDirUserLog+"\"+aFich[F_NAME],;
if( nHand := FOpen( cFich, FO_EXCLUSIVE ) < 0,; //si no se abre exclusivo es que usuario esta conectado.
( cLogText := MemoRead(cFich),;
cUserName := Trim(MemoLine(cLogText, 254,1)),;
cAccess := Trim(MemoLine(cLogText, 254,2)),;
cComputName := Trim(MemoLine(cLogText, 254,3)),;
cIP := Trim(MemoLine(cLogText, 254,4)),;
cGrpDomm := Trim(MemoLine(cLogText, 254,5)),;
cWinUser := Trim(MemoLine(cLogText, 254,6)),;
aadd( aActiveUsers, {cUserName,cAccess,cComputName,cIP,cGrpDomm,cWinUser} ) ),;
FClose(nHand) ) } )
XBrowse(aActiveUsers,"Usuarios conectados a "+cExeName)
Return nil
//---------------//Conocer IP del ordenador
Function GetIPs(cEquipo)
local cIP
local cNombServ:=Upper(GetPvProfString("Config","NombreServidor","SERVER",cIniFile))
DEFAULT cEquipo := "LOCAL"
WsaStartUp()
if upper(cEquipo) == "LOCAL"
cIP := GetHostByName( GetHostName() ) //IP equipo local
elseif upper(cEquipo) == "SERVIDOR"
cIP := GetHostByName(cNombServ) //IP equipo en red segun nombre dado
endif
WsaCleanUp()
Return cIP
//---------------------// Retorna nombre de Grupo o Dominio
Function GroupDomain()
Local oLoc,oWmi,oList,oItem, cComputerDomain, cGroupDomain
oLoc:= CreateObject( "wbemScripting.SwbemLocator" )
oWmi:= oLoc:ConnectServer()
If oWmi == NIL // ? "Sorry!! No Wmi"
Return ""
Endif
oList := oWmi:ExecQuery("Select * from Win32_ComputerSystem")
FOR EACH oItem IN oList
cComputerDomain = oItem:Domain
If oItem:PartOfDomain
cGroupDomain := "Dominio: " + cComputerDomain
Else
cGroupDomain := "Grupo de Trabajo: " + cComputerDomain
EndIf
NEXT
oLoc:=NIL
oWmi:=NIL
oList:=NIL
Return cGroupDomain
//------------------------
//FIN USUARIOS CONECTADOS
//------------------------
Return to FiveWin para Harbour/xHarbour
Users browsing this forum: Google [Bot] and 48 guests