|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
[ Vb.Net ] User Processi - Genymus
Salve, sto progettando un'applicazione per la gestione dei programmi e avrei bisogno di poter maneggiare solo quelli aperti da un solo utente ad esempio mario.
Del tipo: Marco apre il processo iexplorer.exe Poi cambia utente lasciando però aperta la sua sessione. Mario arriava e si logga con il suo user. Faccio finta che Mario non possa aprire internet explorer perchè io non voglio. Ecco questo programma deve killare iexplorer.exe di mario lasciando attivo lo stesso processo dalla parte di marco Come ottengo l'username che stà utilizzando il processo? 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 |
|
|
|
|
|
#2 |
|
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
pultroppo da errori e non riesco a farlo funzionare:
Messo così come sta, inserendo anche: Imports System.Management Codice:
Public Function KillProcessByUser(ByRef user As String) As Object
Try
'System.Management instances needed
Dim query As New SelectQuery("Win32_Process")
Dim searcher As New ManagementObjectSearcher(query)
Dim observer As New ManagementOperationObserver()
'loop through each item in the collection
For Each process As ManagementObject In searcher.Get()
Try
'this string will hold the information returned
'from InvokeMethod("GetOwner")
Dim info(1) As String
'get the information on the current process
process.InvokeMethod("GetOwner", CType(info, Object()))
'now make sure the owner is correct
If info(0).ToString().ToUpper() = user.ToUpper() Then
'kill the process
process.InvokeMethod(observer, "Terminate", Nothing)
End If
Catch ex As Exception
MessageBox.Show(ex.ToString())
Return False
End Try
Next
Catch ex As Exception
MessageBox.Show(ex.ToString())
Return False
End Try
Return True
End Function
Codice:
[> Tipo 'SelectQuery' non definito. [> Tipo 'ManagementObjectSearcher' non definito. [> Tipo 'ManagementOperationObserver' non definito. [> Tipo 'ManagementObject' non definito. 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 |
|
|
|
|
|
#4 |
|
Junior Member
Iscritto dal: Aug 2008
Messaggi: 25
|
Progetto >> Aggiungi Riferimento >> .NET >> System.Management
Ciao! |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Lo ho già fatto mettendo:
<< Imports 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 |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Dec 2004
Messaggi: 3210
|
Come già segnalato, aggiungi un Rif. allo spacename .Net System.Management, e usa il sistema della query solo per ricavare il nome dello User di ogni Processo. Per tutto il resto ti consiglio di dare un'occhiata alle ottime possibilità offerte dallo spacename System.Diagnostics e System.Diagnostics.Process.
Ad esempio, io risolverei così : 1. Funzione che mi restituisce l'Owner di un Process ( uso di System.Management ) : Codice:
Private Function GetUserProcesso(ByVal P As Process) As String
Dim Q As New System.Management.ObjectQuery("SELECT * FROM Win32_Process Where ProcessID = '" & P.Id & "'")
Dim OS As New System.Management.ManagementObjectSearcher(Q)
If OS.Get.Count = 0 Then Return "N.D."
Dim arrayUsr(1) As String
For Each MO As System.Management.ManagementObject In OS.Get
MO.InvokeMethod("GetOwner", DirectCast(arrayUsr, Object()))
Next
Return arrayUsr(0)
End Function
Codice:
Dim idProcesso As Integer
Dim nomeProcesso As String
Dim utenteProcesso As String
Dim P As System.Diagnostics.Process
For Each P In System.Diagnostics.Process.GetProcesses()
idProcesso = P.Id
nomeProcesso = P.ProcessName
utenteProcesso = GetUserProcesso(P)
lst_processi.Items.Add(idProcesso & " / " & nomeProcesso & " / " & utenteProcesso)
Next
'Ordino alfabeticamente
lst_processi.Sorted = True
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Oct 2007
Messaggi: 364
|
Funziona... come fare senza di voi.
__________________
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: 22:09.



















