|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
[ Vb.Net 2008 Framework 3.5 ] Nome Utente Processi - Genymus
Salve, ho bisogno di trovare il nome utente dei processi attivi (tipo task manager)...
Fino a poco tempo fa usavo il seguente pezzo di codice: Codice:
Dim qs As New System.Management.ObjectQuery("SELECT * FROM Win32_Process WHERE ProcessID = '" & Id & "'") Dim os As New System.Management.ManagementObjectSearcher(qs) Dim mo As System.Management.ManagementObject Dim ar(1) As String If (os.Get.Count = 0) Then Return ("Non Disponibile") Else For Each mo In os.Get mo.InvokeMethod("GetOwner", DirectCast(ar, Object())) Next Return Trim(ar(0)) End If è possibile che sul namespace "System.Diagnostic" non sia presente la funzione "getUsername" o una simile??? Sperando ringrazio anticipatamente. Genymus Ps: a chi il codice sopra possa andare bene e non avesse troppe pretese, ricordo che bisogna aggiungere il riferimento a "System.management" (Progetto > Aggiungi riferimento > .NET > System.management).
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Vero, System Diagnostics Process ha una moltitudine di metodi e proprietà ma non c'è semplicemente un .UserName o simile. Per questo serve ancora un accesso vecchia maniera ad un paio di API, ma non aspettarti di avere comunque una lista completa di tutti gli Owners di processo. Vedrai che riceverai parecchi "Accesso negato", in ogni caso prova questo :
Codice:
Public Declare Function OpenProcessToken Lib "advapi32.dll" Alias "OpenProcessToken" (ByVal ProcessHandle As IntPtr, ByVal DesiredAccess As UInt32, ByRef TokenHandle As IntPtr) As Boolean Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As IntPtr) As Boolean Public Const TOKEN_QUERY As UInteger = &H8 Codice:
Dim ph As IntPtr = IntPtr.Zero For Each P As Process In Process.GetProcesses Try OpenProcessToken(P.Handle, TOKEN_QUERY, ph) Dim WI As New Security.Principal.WindowsIdentity(ph) ListBox1.Items.Add(P.ProcessName & " - " & WI.Name) Catch ex As Exception ListBox1.Items.Add(P.ProcessName & " - " & ex.Message) Finally If ph <> IntPtr.Zero Then CloseHandle(ph) End Try Next ![]() |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Direi che il codice mi basta per quello che mi serve, vedo che apparte i processi di systema, i processi aperti dagli utenti vengono visti...
Grazie. Genymus
__________________
Genymus!!! "Che cosa vorreste far incidere sulla vostra tomba?". "Torno fra 5 minuti." "Lucido" è quando credi soltanto a metà di ciò che ti dicono. "Brillante" è quando sai a quale metà credere. "Pensa, ogni volta che respiro muore un uomo." "Hai provato a fare qualcosa per l'alito?" Aforismieaforismi.it |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:59.