读书人

VB.NET跪求获取系统中某个特定用户的特

发布时间: 2012-09-08 10:48:07 作者: rapoo

VB.NET跪求获取系统中某个特定用户的特定进程
VB.NET跪求获取系统中某个特定用户的特定进程,比如 用户AAA 开启了3个EXCLE.EXE, 用户BBB开了2个EXCLE.EXE
现在我需要把用户B的 2个EXCLE.EXE 找出来。


晕了半天了。。。看似简单。附加我找的一些结果
这个是找进程名以及PID的


VB.NET code
    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 的那


下面这个是获取当前用户名的
VB.NET code
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 Class


[解决办法]
使用WMI获取:
C# code
public 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;}
[解决办法]
没验证。用工具转的
VB.NET code
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 

读书人网 >VB Dotnet

热点推荐