VB.NET跪求获取系统中某个特定用户的特定进程
VB.NET跪求获取系统中某个特定用户的特定进程,比如 用户AAA 开启了3个EXCLE.EXE, 用户BBB开了2个EXCLE.EXE
现在我需要把用户B的 2个EXCLE.EXE 找出来。
晕了半天了。。。看似简单。附加我找的一些结果
这个是找进程名以及PID的
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click Dim sProcesses() As System.Diagnostics.Process Dim sProcess As System.Diagnostics.Process Dim s As String sProcesses = System.Diagnostics.Process.GetProcesses() s 的那
Public Class Form2 Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, ByRef nSize As Integer) As Integer Public Function GetUserName() As String Dim iReturn As Integer Dim userName As String userName = New String(CChar(" "), 50) iReturn = GetUserName(userName, 50) GetUserName = userName.Substring(0, userName.IndexOf(Chr(0))) End Function Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Me.TextBox1.Text = GetUserName() End SubEnd Classpublic static string GetProcessInfoByPID(int PID, out string User, out string Domain){ User = String.Empty; Domain = String.Empty; OwnerSID = String.Empty; string processname = String.Empty; try { ObjectQuery sq = new ObjectQuery ("Select * from Win32_Process Where ProcessID = '" + PID + "'"); ManagementObjectSearcher searcher = new ManagementObjectSearcher(sq); if (searcher.Get().Count == 0) return OwnerSID; foreach (ManagementObject oReturn in searcher.Get()) { string[] o = new String[2]; //Invoke the method and populate the o var with the user name and domain oReturn.InvokeMethod("GetOwner", (object[])o); //int pid = (int)oReturn["ProcessID"]; processname = (string)oReturn["Name"]; //dr[2] = oReturn["Description"]; User = o[0]; if (User == null) User = String.Empty; Domain = o[1]; if (Domain == null) Domain = String.Empty; string[] sid = new String[1]; oReturn.InvokeMethod("GetOwnerSid", (object[])sid); OwnerSID = sid[0]; return OwnerSID; } } catch { return OwnerSID; } return OwnerSID;}
[解决办法]
没验证。用工具转的
Public Shared Function GetProcessInfoByPID(PID As Integer, User As String, Domain As String) As String User = [String].Empty Domain = [String].Empty OwnerSID = [String].Empty Dim processname As String = [String].Empty Try Dim sq As New ObjectQuery("Select * from Win32_Process Where ProcessID = '" & PID & "'") Dim searcher As New ManagementObjectSearcher(sq) If searcher.[Get]().Count = 0 Then Return OwnerSID End If For Each oReturn As ManagementObject In searcher.[Get]() Dim o As String() = New [String](1) {} 'Invoke the method and populate the o var with the user name and domain oReturn.InvokeMethod("GetOwner", DirectCast(o, Object())) 'int pid = (int)oReturn["ProcessID"]; processname = DirectCast(oReturn("Name"), String) 'dr[2] = oReturn["Description"]; User = o(0) If User Is Nothing Then User = [String].Empty End If Domain = o(1) If Domain Is Nothing Then Domain = [String].Empty End If Dim sid As String() = New [String](0) {} oReturn.InvokeMethod("GetOwnerSid", DirectCast(sid, Object())) OwnerSID = sid(0) Return OwnerSID Next Catch Return OwnerSID End Try Return OwnerSIDEnd Function