FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin for Harbour/xHarbour ID of the current session
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: ID of the current session
Posted: Thu Sep 12, 2024 03:46 PM
Antonio Linares wrote:WaitRun( "query user > users.txt" )
MsgInfo( MemoRead( "users.txt" ) )
Hola Antonio.

He llegado a este post porque intento ejecutar esta sentencia pero no se ejecuta, WaitRun no indica el problema, pero hb_run() sí:
Code (fw): Select all Collapse
#include 'fivewin.ch'

Function Main()

    HB_RUN( "query user > users.txt" )
    MsgInfo( MemoRead( "users.txt" ) )

Return ( Nil )


en cambio el comando desde el CMD funciona correctamente:


no entiendo donde puede estar el problema ya que hb_run tendría que ejecutar cualquier comando del CMD. he probado de poner la ruta completa c:\windows\system32\query.exe y tampoco funciona.
--------

¿ Y porque no ?

¿ And why not ?
Posts: 318
Joined: Fri Jan 14, 2022 08:37 AM
Re: ID of the current session
Posted: Thu Sep 12, 2024 04:16 PM
Hola Víctor,

En sentido estricto "query user > users.txt" no es un comando y por tanto es esperado que no funcione.
Lo que si es un comando es query.exe

Así pues habria/ tendrías que ejecutar query.exe y pasarle los parámetros necesarios y recoger la salida

No sé ahora mismo como se haría, pero te dejo unas funciones que igual podrian servir:
WaitRun()
hb_ProccessRun()
wapi_ShellExecute()

Quizá el sistema WMI sea más adecuado: https://forums.fivetechsupport.com/viewtopic.php?f=6&t=22185&p=118127&hilit=wmi&sid=0b92ac34c1a3f381e7fbd9a90f96b50e#p118127

Salu2
Posts: 309
Joined: Wed Mar 28, 2018 04:38 PM
Re: ID of the current session
Posted: Fri Sep 13, 2024 12:21 PM
cierto paquitohm, me había ofuscado en la vía rápida y no era el buen camino

pongo el código por si alguien le interesa saber la lista de usuarios de windows y los que están conectados, esta segunda no sé si es la forma más ética, pero funciona. Por cierto, hay que ejecutarlo en modo administrador para que tome todos los datos.
Code (fw): Select all Collapse
Function Main()

    USuarios()
    Sesiones()

Return (Nil)

Static Function Sesiones()

    Local oWMIService
    Local oWMI
    Local oSessions
    Local oSession
    Local oAntecedent
    Local cName
    Local oDependent
    Local cSesiones := ''
    Local aSesiones := {}
    Local aAntecedent := {}

    oWMI := CreateObject( "WbemScripting.SWbemLocator" )
    oWMIService := oWMI:ConnectServer( )
    oSessions := oWMIService:ExecQuery( "SELECT * FROM Win32_LoggedOnUser" )

    for each oSession in oSessions

        aAntecedent := hb_ATokens( oSession:Antecedent, ',' )
        cName := Substr( aAntecedent[2],7, Len(Alltrim(aAntecedent[2]))-7 )

        If aScan( aSesiones, cName ) == 0
            aAdd( aSesiones, cName )
        Endif
        
    next

    xBrowse(aSesiones,'Sesiones')

Return ( Nil )


Static Function Usuarios()
    
    Local oWMIService
    Local oWMI
    Local oUsers
    Local oUser
    Local cUserName
    Local aUsuarios := {}

    oWMI := CreateObject( "WbemScripting.SWbemLocator" )
    oWMIService := oWMI:ConnectServer( )
    oUsers := oWMIService:ExecQuery( "SELECT * FROM Win32_UserAccount WHERE LocalAccount = TRUE" )

    For Each oUser In oUsers
        aAdD( aUsuarios, oUser:Name )
    Next
    
    xBrowse(aUsuarios,'Usuarios')

Return ( Nil )
Salud!
--------

¿ Y porque no ?

¿ And why not ?

Continue the discussion