用C#获取进程信息.docx
- 文档编号:5825662
- 上传时间:2023-01-01
- 格式:DOCX
- 页数:20
- 大小:25.76KB
用C#获取进程信息.docx
《用C#获取进程信息.docx》由会员分享,可在线阅读,更多相关《用C#获取进程信息.docx(20页珍藏版)》请在冰豆网上搜索。
用C#获取进程信息
用C#获取进程信息(转)
2008-10-0710:
08
本文将以一个简单的例子来说明如何使用C#获得当前处于激活状态的进程并读取某个特定ID进程的基本信息。
现在有很多软件都具有读取系统进程的功能,比较著名的是CustomizerXP,它是一个用来设置WindowsXP系统各种设置的软件。
这个软件其中有一个功能就是能够打开或关闭系统运行时加载的程序。
当然,本文没有做到CustomizerXP那么美观和细化的程度,但是我想只要知道了基本的方法,制作这样的功能是很简单的。
这个例子使用了.NETFramework的Process类来获得激活进程的信息,给出了当前激活进程的列表,并且能够显示某一个进程的一些基本信息。
制作过程一、运行VisualStudio.NET,新建VisualC#.NET工程,这里取名为ProcessInfo。
二、在解决方案资源管理器中,将Form1.cs改名为frmProcessInfo.cs(此项为可选)。
三、将Form1的Text属性改为ProcessInformation,Font改为Verdana,9pt(此项为可选)。
四、在窗体上添加三个控件:
两个按钮和一个TextBox。
对控件的属性进行修改,如下:
控件Name属性Text属性
Button1btnGetProcessList点击这里获得当前激活进程列表
Button2btnGetProcessByID获得指定ID的进程信息:
TextBoxtxtProcessIDN/A
调整各控件的位置,此时用户界面类似于下图:
五、进入frmProcessInfo.cs代码编辑器。
在文件头部添加以下一行代码:
usingSystem.Diagnostics;
【注】System.Diagnostics命名空间提供特定的类,使您能够与系统进程、事件日志和性能计数器进行交互。
六、在frmProcessInfo.cs[设计]中双击btnGetProcessList按钮。
系统自动添加btnGetProcessList_Click事件。
填写以下代码到btnGetProcessList_Click事件中:
stringstr="";
Process[]processes;
//Getthelistofcurrentactiveprocesses.
processes=System.Diagnostics.Process.GetProcesses();
//Grabsomebasicinformationforeachprocess.
Processprocess;
for(inti=0;i { process=processes[i]; str=str+Convert.ToString(process.Id)+": "+ process.ProcessName+"\r\n"; } //Displaytheprocessinformationtotheuser System.Windows.Forms.MessageBox.Show(str); //DefaulttheTextBoxvaluetothefirstprocessID-fortheGetByIDbutton txtProcessID.Text=processes[0].Id.ToString(); 【注】Process组件提供对正在计算机上运行的进程的访问。 用最简短的话来说,进程就是当前运行的应用程序。 线程是操作系统向其分配处理器时间的基本单位。 线程可执行进程的任何一部分代码,包括当前由另一线程执行的部分。 对于启动、停止、控制和监视应用程序等任务,Process组件是很有用的工具。 使用Process组件,可以获取当前运行的进程的列表,或者启动新的进程。 Process组件用于访问系统进程。 初始化Process组件后,可使用该组件来获取有关当前运行的进程的信息。 此类信息包括线程集、加载的模块(.dll和.exe文件)和性能信息(如进程当前使用的内存量)。 系统进程在系统上由其进程标识符唯一标识。 与许多Windows资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。 句柄是表示资源标识符的一般术语。 即使进程已退出,操作系统仍保持进程句柄,该句柄通过Process组件的Handle属性访问。 因此,可以获取进程的管理信息,如ExitCode(通常,或者为零表示成功,或者为非零错误代码)和ExitTime。 句柄是非常有价值的资源,所以句柄泄漏比内存泄漏危害更大。 七、回到frmProcessInfo.cs[设计]页,双击btnGetProcessByID按钮,则IDE自动添加btnGetProcessByID_Click事件在frmProcessInfo.cs 里。 在btnGetProcessByID_Click事件中,填写以下代码: try { strings=""; System.Int32processid; Processprocess; //Retrievetheadditionalinformationaboutaspecificprocess processid=Int32.Parse(txtProcessID.Text); process=System.Diagnostics.Process.GetProcessById(processid); s=s+"该进程的总体优先级类别: "+Convert.ToString(process.PriorityClass)+"\r\n"; s=s+"由该进程打开的句柄数: "+process.HandleCount+"\r\n"; s=s+"该进程的主窗口标题: "+process.MainWindowTitle+"\r\n"; s=s+"该进程允许的最小工作集大小: "+process.MinWorkingSet.ToString()+"\r\n"; s=s+"该进程允许的最大工作集大小: "+process.MaxWorkingSet.ToString()+"\r\n"; s=s+"该进程的分页内存大小: "+process.PagedMemorySize+"\r\n"; s=s+"该进程的峰值分页内存大小: "+process.PeakPagedMemorySize+"\r\n"; System.Windows.Forms.MessageBox.Show(s); } catch { System.Windows.Forms.MessageBox.Show("不合法的进程ID! "); } 【注】Int32值类型表示值介于-2,147,483,648到+2,147,483,647之间的有符号整数。 Int32提供了一些方法,来比较该类型的实例、将实例的值转换为它的String表示形式以及将数字的String表示形式转换为该类型的实例。 有关格式规范代码如何控制值类型的String表示形式的信息,请参阅格式设置概述。 此类型实现接口IComparable、IFormattable和IConvertible。 使用Convert类进行转换,而不是使用此类型的IConvertible显式接口成员实现。 八、主要代码我们已经填写完毕。 下面使用菜单“生成”>“生成解决方案”命令后,按F5即可测试程序了。 以下为当前进程列表以及某一个特定ID进程的基本信息抓图: 值得一提的是,Process类具有很多成员变量,这些成员变量可以获得进程的几乎每一个细节。 上面的例子中只是简单地选择了几个成员加以演示。 如果开发中有需要,可以参考MSDNLibrary,查询Process类成员以获得更详细的信息,这里就不一一列出了。 以上通过一个简单的例子来说明如何使用.NETFramework和C#的Process类来获得进程的信息。 通过这个例子我们可以看出,C#提供给我们强大和便捷的Process类,使我们的开发更容易、更方便。 这对于编写高效、快速开发应用程序是非常有帮助的。 希望能有更多的朋友提供更好的意见和建议,也欢迎大家分享更多的开发、学习经验。 C#关闭excel进程方法[转载] 2009-07-0816: 09 一直被一个问题困扰就是导出excel时如何关闭excel进程,我使用过oExcelApp.Quit();也用过GC回收,结果都不理想,后来发现可以kill进程,但是问题是kill进程时不好解决多人并发的使用,比如一个人在导表然后kill所以的excel但是如果同时又有人在导表那么这就把另外一个excel结束了,现在我们要办的是如何kill当前这个进程,这里我们先看一下代码: oExcelApp.Quit(); oExcelApp=null; PublicMethod.Kill(oExcelApp);//调用kill当前excel进程 PublicMethod.Kill()内容是: usingSystem.Runtime.InteropServices; publicclassPublicMethod { publicPublicMethod() { // //TODO: 在此处添加构造函数逻辑 // } [DllImport("User32.dll", CharSet = CharSet.Auto)] publicstaticexternintGetWindowThreadProcessId(IntPtrhwnd,outintID); publicstaticvoidKill(Excel.Applicationexcel) { IntPtrt=newIntPtr(excel.Hwnd); //得到这个句柄,具体作用是得到这块内存入口 intk=0; GetWindowThreadProcessId(t,outk); //得到本进程唯一标志k System.Diagnostics.Processp=System.Diagnostics.Process.GetProcessById(k); //得到对进程k的引用 p.Kill(); //关闭进程k } } 这样我们就可以关闭当前进程excel而不是杀掉所有的类型为excel进程了 C#操作完EXCEL如何砌底关闭进程 2009-04-2117: 16 有用C#编程操作EXCEL的朋友可能都遇到过在操作完EXCEL之后,无法关闭EXECL进程的情况。 这样即浪费了内存资源,又会造成软件的不稳定性。 一般我位都是以下面方式关闭的,但很多时候都没成功/ System.Runtime.InteropServices.Marshal.ReleaseComObject(Range); System.Runtime.InteropServices.Marshal.ReleaseComObject(myBook); System.Runtime.InteropServices.Marshal.ReleaseComObject(myExcel); Range=null; myBook=null; myExcel=null; C#和A下excel进程一被打开,有时就无法关闭, 尤其是website.对关闭该进程有过GC、release等方法,但这些方法并不是在所有情况下均适用。 于是提出了kill process的方法, 目前我见过的方法多是用进程创建时间筛选excel.exe进程, 然后kill。 这样的方法是不精确的, 也是不安全的, 通过对网上一些关于Api运用文章的阅读, 我找到了更为直接精确找到这个process并kill的方法,以下就是代码 using System.Runtime.InteropServices; [DllImport("User32.dll", CharSet = CharSet.Auto)] public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID); protected void Button1_Click(object sender, EventArgs e) { Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass(); excel.Workbooks.Open("d: \aaa.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); IntPtr t = new IntPtr(excel.Hwnd); int k = 0; GetWindowThreadProcessId(t, out k); System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k); p.Kill(); } C#导出Excel后关闭进程(EXCEL.EXE)释放资源的解决方案 2009-07-1611: 27 一年前,从网上找到一些C#导出MSExcel的例子,但是都不能彻底销毁其所创建的Excel进程,典型的就是进程中的EXCEL.EXE不能关掉。 网上的解决方案大部分是杀掉所有的Excel进程,偶一直感觉不爽。 最近,做了几个月的WinForm,接触了一些进程、句柄方面的知识。 于是试着解决一下,没想到成功了,创建的Excel进程被成功Kill掉了,而其它Excel进程则相安无事。 看代码吧: 1.usingSystem; 2.usingSystem.Collections.Generic; 3.usingSystem.Text; 4.usingSystem.Reflection; 5.usingSystem.Runtime.InteropServices; 6.usingSystem.Drawing; 7. 8.namespaceVeryCodes.Common.MyExcel 9.{ 10. /// 11. ///ExcelClass的摘要说明。 12. /// 13. publicclassMSExcel 14. { 15. /// 16. ///构建ExcelClass类 17. /// 18. publicMSExcel() 19. { 20. //别忘了需要添加ExcelLibrary的引用 21. this.m_objExcel=newMicrosoft.Office.Interop.Excel.Application(); 22. } 23. /// 24. ///构建ExcelClass类 25. /// 26. /// 27. publicMSExcel(Microsoft.Office.Interop.Excel.ApplicationobjExcel) 28. { 29. this.m_objExcel=objExcel; 30. } 31. 32. /// 33. ///列标号,Excel最大列数是256 34. /// 35. privatestring[]ALists=newstring[]{ 36. "A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z", 37. "AA","AB","AC","AD","AE","AF","AG","AH","AI","AJ","AK","AL","AM","AN","AO","AP","AQ","AR","AS","AT","AU","AV","AW","AX","AY","AZ", 38. "BA","BB","BC","BD","BE","BF","BG","BH","BI","BJ","BK","BL","BM","BN","BO","BP","BQ","BR","BS","BT","BU","BV","BW","BX","BY","BZ", 39. "CA","CB","CC","CD","CE","CF","CG","CH","CI","CJ","CK","CL","CM","CN","CO","CP","CQ","CR","CS","CT","CU","CV","CW","CX","CY","CZ", 40. "DA","DB","DC","DD","DE","DF","DG","DH","DI","DJ","DK","DL","DM","DN","DO","DP","DQ","DR","DS","DT","DU","DV","DW","DX","DY","DZ", 41. "EA","EB","EC","ED","EE","EF","EG","EH","EI","EJ","EK","EL","EM","EN","EO","EP","EQ","ER","ES","ET","EU","EV","EW","EX","EY","EZ", 42. "FA","FB","FC","FD","FE","FF","FG","FH","FI","FJ","FK","FL","FM","FN","FO","FP","FQ","FR","FS","FT","FU","FV","FW","FX","FY","FZ", 43. "GA","GB","GC","GD","GE","GF","GG","GH","GI","GJ","GK","GL","GM","GN","GO","GP","GQ","GR","GS","GT","GU","GV","GW","GX","GY","GZ", 44. "HA","HB","HC","HD","HE","HF","HG","HH","HI","HJ","HK","HL","HM","HN","HO","HP","HQ","HR","HS","HT","HU","HV","HW","HX","HY","HZ", 45. "IA","IB","IC","ID","IE","IF","IG","IH","II","IJ","IK","IL","IM","IN","IO","IP","IQ","IR","IS","IT","IU","IV" 46. }; 47. 48. /// 49. ///获取描述区域的字符 50. /// 51. /// 52. /// 53. /// 54. publicstringGetAix(intx,inty) 55. { 56. if(x>256){return"";} 57. strings=""; 58. s=s+ALists[x-1].ToString(); 59. s=s+y.ToString(); 60. returns; 61. } 62. 63. /// 64. ///给单元格赋值1 65. /// 66. /// 67. /// 68. /// 69. /// 70. publicvoidsetValue(inty,intx,stringalign,stringtext) 71. { 72. Microsoft.Office.Interop.Excel.Rangerange=sheet.get_Range(this.GetAix(x,y),miss); 73. range.set_Value(miss,text); 74.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C# 获取 进程 信息