mostrar todas las terminales que se encuentran en el sistema

mostrar todas las terminales que se encuentran en el sistema

Postby pedroluis » Thu Feb 28, 2019 9:16 pm

Hola Gente !
De que manera puedo listar o ver todas las terminales que están utilizando el programa simultaneamente ?
Pedro L. Lavallen
San Luis (Capital), Argentina
User avatar
pedroluis
 
Posts: 117
Joined: Sun Oct 08, 2017 12:51 pm
Location: San Luis (Capital), Argentina

Re: mostrar todas las terminales que se encuentran en el sistema

Postby FranciscoA » Sun Mar 03, 2019 4:46 pm

Hola Pedro.
Mira si te es útil este código y lo adaptas.
Code: Select all  Expand view
//----------------------------------------------------------------
//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
//------------------------

Saludos.
Francisco J. Alegría P.
Chinandega, Nicaragua.

Fwxh-MySql-TMySql
User avatar
FranciscoA
 
Posts: 2158
Joined: Fri Jul 18, 2008 1:24 am
Location: Chinandega, Nicaragua, C.A.


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 48 guests