|
|
|
![]() |
|
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: 00:35.