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

刘兄弟 2010-08-02 06:34:50
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 = ""
' s = vbCrLf & "ProCSS Info " & vbCrLf
For Each sProcess In sProcesses
s = s & sProcess.Id & sProcess.ProcessName() & "|" '& & sProcess.MachineName & "|" & vbCrLf
Next
TextBox1.Text = s
End Sub


下面这个是获取当前用户名的
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 Sub
End Class
...全文
184 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhengxiangxue 2012-08-21
  • 打赏
  • 举报
回复
我也想知道
刘兄弟 2010-08-04
  • 打赏
  • 举报
回复
得手了,跪谢2位了
兔子-顾问 2010-08-03
  • 打赏
  • 举报
回复
没验证。用工具转的

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 OwnerSID
End Function



Convert C# -> VB.NET
刘兄弟 2010-08-03
  • 打赏
  • 举报
回复
楼上大大跪求VB版吖。
捷哥1999 2010-08-02
  • 打赏
  • 举报
回复
使用WMI获取:
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;
}
刘兄弟 2010-08-02
  • 打赏
  • 举报
回复
1楼上好人吖,来香一个。
x236re 2010-08-02
  • 打赏
  • 举报
回复
呵呵,沙发,帮顶

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧