Luigi Posted November 17, 2014 Share Posted November 17, 2014 (edited) Hi forum, I need run a service it must be check if there are user logged and get your user name. I found this script in VB and adjust to AutoIt. The code work fine, it show what I need. The question is: 1) there are another ways? 2) I think about writing a AdLibRegister ("execute_function", $iTime) stop checking the status of the user ... But this needs to WMI, and will stay exectuando function every $iTime time interval. I know that Windows / AutoIt has lots of functions that fire a trigger when a situation happens, it is possible to implement this function? 3) if such a script, to be executed every 500ms on an old machine (for example: Intel Celeron D326 2.53GH with 2Gb Ram, with Win XP), could present some certain slowness?? Thanks, Detefon Local $strComputer = "." ; " use "." for local computer Local $objWMI = ObjGet("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" _ & $strComputer & "\root\cimv2") Local $colSessions = $objWMI.ExecQuery _ ("Select * from Win32_LogonSession Where LogonType = 2 OR LogonType = 10") If $colSessions.Count = 0 Then ConsoleWrite("No interactive users found" & @LF) Else For $objSession In $colSessions If $objSession.LogonType = 2 Then ConsoleWrite("Logon type: Console" & @LF) Else ConsoleWrite("Logon type: RDP/Terminal Server" & @LF) EndIf Local $colList = $objWMI.ExecQuery("Associators of " _ & "{Win32_LogonSession.LogonId=" & $objSession.LogonId & "} " _ & "Where AssocClass=Win32_LoggedOnUser Role=Dependent") For $objItem In $colList ConsoleWrite("User: " & $objItem.Name & @LF) ConsoleWrite("FullName: " & $objItem.FullName & @LF) ConsoleWrite("Domain: " & $objItem.Domain & @LF) Next ConsoleWrite("Session start time: " & $objSession.StartTime & @LF) Next EndIf Edited November 17, 2014 by Detefon Visit my repository Link to comment Share on other sites More sharing options...
Luigi Posted November 17, 2014 Author Share Posted November 17, 2014 I found an alternative, it's work on DOS, but not work when run in Run() query session /server:computer_name Have some resctriction to execute "query session"? The script ;~ #include <Array.au3> #include <File.au3> Local $cmd = "query session /server:" & @ComputerName ; don't work Local $cmd = "dir" ; work Local $execute = _CMDreturn($cmd) ConsoleWrite($execute & @LF) Func _CMDreturn($sCommand) ; This function returns the output of a DOS command as a string $cmdreturn = "" $stream = Run(@ComSpec & " /c " & $sCommand, @SystemDir, @SW_HIDE, $STDERR_MERGED + $STDIN_CHILD) While 1 ; loop through the return from the command until there is no more $line = StdoutRead($stream) If @error Then ExitLoop $cmdreturn &= $line WEnd ;~ $cmdreturn = _OEM2ANSI($cmdreturn) Return $cmdreturn EndFunc ;==>_CMDreturn Func _OEM2ANSI($Entrada) Local $Retorno = DllCall("user32.dll", "Int", "OemToChar", "str", $Entrada, "str", "") Return $Retorno[2] EndFunc ;==>_OEM2ANSI Visit my repository Link to comment Share on other sites More sharing options...
jguinch Posted November 17, 2014 Share Posted November 17, 2014 The query command is available only in the native system32 folder (c:windowssystem32). If you are using a x64 Windows and a x86 script, then try to set the full path to the command, using the sysnative folder. Local $cmd = "c:\windows\sysnative\query session" Luigi and faldo 1 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Luigi Posted November 18, 2014 Author Share Posted November 18, 2014 @jguinch, Thank you. Your answer makes sense. I believe it should work. But something has to be considered also (something I did not initially): the Windows version. query.exe is not available in Windows 7 Home Basic. Visit my repository Link to comment Share on other sites More sharing options...
Solution jguinch Posted November 18, 2014 Solution Share Posted November 18, 2014 Si WMI seems to be good.. A way could be to use WinAPI functions LsaEnumerateLogonSessions + LsaGetLogonSessionData... but it seems to be hard (for me). Another way could be to use an external tool like SysInternals LogonSessions. Luigi 1 Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Luigi Posted November 18, 2014 Author Share Posted November 18, 2014 @jguinch, you give me arguments to new search, and found >this post. It's simple and work fine for me. Thank you again! ^^ Visit my repository Link to comment Share on other sites More sharing options...
jguinch Posted November 18, 2014 Share Posted November 18, 2014 Glad to help you ! Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now