c# 如何用using引入 process 类

c# 如何用using引入 process 类,第1张

1 c#之process类相关整理

2 2010-06-11 10:55

3

4 一、根据进程名获取进程的用户名?

5

6 需要添加对 System.Management.dll 的引用

7

8 using System.Diagnostics

9 using System.Management

10

11 static void Main(string[] args)

12 {

13 foreach (Process p in Process.GetProcesses())

14{

15 Console.Write(p.ProcessName)

16 Console.Write("----")

17 Console.WriteLine(GetProcessUserName(p.Id))

18}

19

20Console.ReadKey()

21 }

22

23 private static string GetProcessUserName(int pID)

24 {

25 string text1 = null

26

27 SelectQuery query1 = new SelectQuery("Select * from Win32_Process WHERE processID=" + pID)

28 ManagementObjectSearcher searcher1 = new ManagementObjectSearcher(query1)

29

30 try

31 {

32 foreach (ManagementObject disk in searcher1.Get())

33 {

34 ManagementBaseObject inPar = null

35 ManagementBaseObject outPar = null

36

37 inPar = disk.GetMethodParameters("GetOwner")

38

39 outPar = disk.InvokeMethod("GetOwner", inPar, null)

40

41 text1 = outPar["User"].ToString()

42 break

43 }

44 }

45 catch

46 {

47 text1 = "SYSTEM"

48 }

49

50 return text1

51 }

52

53

54 进程名 是 p.ProcessName

55

56 二、获取进程

57

58 using System.Diagnostics

59 【注】System.Diagnostics 命名空野判禅间提供特定的类冲宴,使您能够与系统进程颂尘、事件日志和性能计数器进行交互。

60 string str = ""

61 Process[] processes

62 //Get the list of current active processes.

63 processes = System.Diagnostics.Process.GetProcesses()

64 //Grab some basic information for each process.

65 Process process

66 for(int i = 0i<processes.Length-1i++)

67 {

68 process = processes[i]

69 str = str + Convert.ToString(process.Id) + " : " +

70 process.ProcessName + "\r\n"

71 }

72 System.Windows.Forms.MessageBox.Show(str)

73 txtProcessID.Text = processes[0].Id.ToString()

74

75 //显示进程相关信息

76 string s = ""

77 System.Int32 processid

78 Process process

79 processid = Int32.Parse(txtProcessID.Text)

80 process = System.Diagnostics.Process.GetProcessById(processid)

81 s = s + "该进程的总体优先级类别:" + Convert.ToString(process.PriorityClass) + " \r\n"

82 s = s + "由该进程打开的句柄数:" + process.HandleCount + "\r\n"

83 s = s + "该进程的主窗口标题:" + process.MainWindowTitle + "\r\n"

84 s = s + " 该进程允许的最小工作集大小:" + process.MinWorkingSet.ToString() + " \r\n"

85 s = s + "该进程允许的最大工作集大小:" + process.MaxWorkingSet.ToString() + " \r\n"

86 s = s + "该进程的分页内存大小:" + process.PagedMemorySize + "\r\n"

87 s = s + "该进程的峰值分页内存大小:" + process.PeakPagedMemorySize + "\r\n"

88 System.Windows.Forms.MessageBox.Show(s)

89 }

90 catch

91 {

92 System.Windows.Forms.MessageBox.Show("不合法的进程ID!")

93 }

94 【注】Int32 值类型表示值介于-2,147,483,648 到+2,147,483,647 之间的有符号整数。

95 Int32 提供了一些方法,来比较该类型的实例、将实例的值转换为它的String 表示形式以及将数字的String 表示形式转换为该类型的实例。

96 有关格式规范代码如何控制值类型的String 表示形式的信息,请参阅格式设置概述。

97 此类型实现接口IComparable、IFormattable 和IConvertible。使用Convert 类进行转换,而不是使用此类型的IConvertible 显式接口成员实现。

98 值得一提的是,Process 类具有很多成员变量,这些成员变量可以获得进程的几乎每一个细节。上面的例子中只是简单地选择了几个成员加以演示。如果开发中有需要,可以参考MSDN Library,查询Process类成员以获得更详细的信息,这里就不一一列出了。

99

100 三、杀死进程

101

102 private void button2_Click(object sender, EventArgs e)

103 {

104 if (listView1.SelectedItems.Count >0)

105 {

106try

107{

108 string proName = listView1.SelectedItems[0].Text

109 Process[] p = Process.GetProcessesByName(proName)

110 p[0].Kill()

111 MessageBox.Show("进程关闭成功!")

112 GetProcess()

113}

114catch

115{

116 MessageBox.Show("无法关闭此进程!")

117}

118 }

119 else

120 {

121MessageBox.Show("请选择要终止的进程!")

122 }

123 }

124

125 四、C#中利用process类调用外部程序以及执行dos命令

126

127 private string RunCmd(string command)

128 {

129 //实例一个Process类,启动一个独立进程

130 Process p = new Process()

131 //Process类有一个StartInfo属性

132 //设定程序名

133 p.StartInfo.FileName = "cmd.exe"

134 //设定程式执行参数

135 p.StartInfo.Arguments = "/c " + command

136 //关闭Shell的使用

137 p.StartInfo.UseShellExecute = false

138 //重定向标准输入

139 p.StartInfo.RedirectStandardInput = true

140 p.StartInfo.RedirectStandardOutput = true

141 //重定向错误输出

142 p.StartInfo.RedirectStandardError = true

143 //设置不显示窗口

144 p.StartInfo.CreateNoWindow = true

145 //启动

146 p.Start()

147 //也可以用这种方式输入要执行的命令

148 //不过要记得加上Exit要不然下一行程式执行的时候会当机

149 //p.StandardInput.WriteLine(command)

150 //p.StandardInput.WriteLine("exit")

151 //从输出流取得命令执行结果

152 return p.StandardOutput.ReadToEnd()

153 }

Runtime.exec("notepad") 返回的Process实例是基于Process子类,这点无需质疑。

任何成功实例化的对象所属的类都是非抽象的实现类,抽象的方法已被实现。碧肆

如果想查找其真实子类,可通过:

System.out.println( Process实例引用团和.getClass().getName() )// 详细可参考JAVA反射机制

或塌慧盯着 查源码/Debug 跟踪 Runtime.exec 方法的执行过程。

以上是我告诉你是些常用的技巧,这里根据我看到的源码说说:

Runtime.exec 实际上调用了 java.lang.ProcessBuilder 的实现,不懂的可查 API 文档;

而ProcessBuilder 内部调用 java.lang.ProcessImpl.start(...) 静态方法 返回1个 ProcessImpl实例;

ProcessImpl类 正好是 Process类 的子类。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8269869.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存