delphi中获得进程列表或想要的进程(枚举进程、遍历进程)
- 一个常见的编程任务是枚举所有运行的"应用程序"。Windows 任务管理器就是一个很好的例子。它用两种方式列出"应用程序"。任务管理器的第一个选项卡列出桌面上的所有"应用程序窗口"。第二个选项卡列出系统中的所有"进程"。本文提供了如何执行这些任务的详细信息。
- 枚举顶层窗口如果将枚举进程与枚举桌面上的顶层窗口进行比较,那么枚举顶层窗口可能更容易一些。要枚举顶层窗口,请使用 EnumWindows() 函数。不要使用 GetWindow() 创建自己的窗口列表,因为它可能受 z 轴次序更改和丢失窗口的干扰。
- EnumWindows() 将指向某个回调函数的指针以及用户定义的 LPARAM 值作为其参数。它对桌面上的每个窗口(或顶层窗口)分别调用一次回调函数。然后,回调函数可以对此窗口句柄进行某种处理,如将其添加到一个列表中。此方法可以保证不受窗口 z 轴次序更改等项的干扰。在获取窗口句柄后,可以通过调用 GetWindowText() 来获取其标题。
- 枚举进程
- 在系统中创建进程列表比枚举窗口要稍微复杂一些。这主要是因为执行此操作的 API 函数因所使用的 Win32 操作系统而异。在 Windows 95、Windows 98、Windows Millennium Edition、Windows 2000 和 Windows XP 中,可以使用 ToolHelp32 API 库中的函数。但是,在 Windows NT 中,必须使用 PSAPI API 库中的函数(Platform SDK 中包含该库)。本文将讨论这两种技术,另外还提供一个称为 EnumProcs() 的示例包装函数,该函数可以在 Win32 操作系统中运行。
- 使用 ToolHelp32 库枚举进程
- 首先讨论 ToolHelp32 方法。KERNEL32.dll 中的 ToolHelp32 函数是标准的 API 函数。注意,在 Windows NT 4.0 中不提供这些 API。
- 可以使用 ToolHelp32 提供的各种函数,枚举系统中的进程和线程以及获取内存和模块信息。但是,在枚举进程时,仅需要使用以下三个函数:CreateToolhelp32Snapshot()、Process32First() 和 Process32Next()。
- 使用 ToolHelp32 函数的第一步是创建系统信息的"快照"。可以使用 CreateToolhelp32Snapshot() 函数完成这一步。此函数允许选择在快照中存储的信息类型。如果您需要进程信息,则一定要包括TH32CS_SNAPPROCESS 标志。CreateToolhelp32Snapshot() 函数返回一个句柄,在使用完该句柄后,必须将其传递到 CloseHandle()。
- 下一步,为了检索快照中的进程列表,可以调用一次 Process32First,然后重复调用多次 Process32Next。执行此操作,直到其中的一个函数返回 FALSE 为止。这将逐个获得快照进程列表中的进程。这两个函数都将"快照"句柄和指向 PROCESSENTRY32 结构的指针作为其参数。
- 在调用 Process32First或 Process32Next 后,PROCESSENTRY32 结构将包含系统中某个进程的有用信息。进程 ID 在该结构的 th32ProcessID 成员中。可以将它传递到 OpenProcess() 以获取该进程的句柄。该进程的可执行文件(进程名称)和路径存储在结构的 szExeFile 成员中。还可以在此结构中找到其他有用的信息。(szExeFile是指进程名称)。
- 备注:切记,在调用 Process32First() 之前,将 PROCESSENTRY32 结构的 dwSize 成员设置为 sizeof(PROCESSENTRY32)。***********************************************************************************************************************************
- 举例:
procedure TForm1.Button1Click(Sender: TObject); //在程序中添加一个buttin1按钮和一个memo1显示框
var
jubing : hwnd;//句柄
fprocessentry32 : TProcessEntry32; //结构类型的变量
zhenjia : Boolean; //返回一个布尔值(用来判断是否找到进程信息)
processid : dword; //储存找到的进程ID
mingcheng : string; //储存找到的进程名称 end; begin
jubing := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); //获得进程快照句柄
fprocessentry32.dwSize := sizeof(fprocessentry32); //给TProcessEntry32结构的第一个参数赋值(也可以理解为把这个结构的第一个参数初始化)
zhenjia := Process32First(jubing,fprocessentry32); //使用 Process32First函数取得第一个进程的信息
while zhenjia = true do //如果 Process32First函数执行成功也就是说找到进程列表里的第一个进程时开始循环
begin
zhenjia := Process32Next(jubing,FprocessEntry32); //取得第下一个进程信息
mingcheng := fprocessentry32.szExeFile; //取得一个进程的名称
if mingcheng = 'svchost.exe' then //如果进程名等于这个字符串
self.Memo1.lines.Add(mingcheng); //把找到的进程显示出来
end;
delphi中获得进程列表或想要的进程(枚举进程、遍历进程)的更多相关文章
- 关于跨进程使用回调函数的研究:以跨进程获取Richedit中RTF流为例(在Delphi 初始化每一个TWinControl 对象时,将会在窗体 的属性(PropData)中加入一些标志,DLL的HInstance的值与HOST 进程的HInstance并不一致)
建议先参考我上次写的博文跨进程获取Richedit中Text: 获得QQ聊天输入框中的内容 拿到这个问题,我习惯性地会从VCL内核开始分析.找到TRichEdit声明的单元,分析TRichEdit保存 ...
- 在Delphi中隐藏程序进程
在开发某些软件的时候,为了保护程序自身,就需要用到隐藏程序进程.以下通过实例来讲解隐藏程序进程的方法: 1.创建一个新的项目 Project1 选择File,New Application.在表单Fo ...
- Delphi中线程类TThread实现多线程编程2---事件、临界区、Synchronize、WaitFor……
接着上文介绍TThread. 现在开始说明 Synchronize和WaitFor 但是在介绍这两个函数之前,需要先介绍另外两个线程同步技术:事件和临界区 事件(Event) 事件(Event)与De ...
- 转发 Delphi中线程类TThread 实现多线程编程
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
- Delphi中SendMessage使用说明(所有消息说明) good
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...
- Delphi中的线程类 - TThread详解
Delphi中的线程类 - TThread详解 2011年06月27日 星期一 20:28 Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本 ...
- Delphi中的线程类(转)
Delphi中的线程类 (转) Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对 TThread类的几个成员作一简单介绍,再说明一下 ...
- Delphi 中多线程同步的一些处理方法
Delphi 中多线程同步的一些处理方法 当创建了多个线程,并且多个线程都要访问同一资源,,就有可能出现混乱,于是用Synchronize来控制,使同一时间只有一个线程使用那部分资源,Synchr ...
- Delphi 中的 procedure of object
转载:http://www.cnblogs.com/ywangzi/archive/2012/08/28/2659811.html 总结:TMyEvent = procedure of object; ...
随机推荐
- CGI接口原理及实现(转载)
原文:http://blog.csdn.net/duola_rain/article/details/15812585 CGI接口原理及实现(2012-12-7 Over) 1.CGI定义: CGI( ...
- Spring Quartz定时器 配置文件详解
在JavaEE系统中,我们会经常用到定时任务,比如每天凌晨生成前天报表,每一小时生成汇总数据等等.我们可以使用java.util.Timer结合java.util.TimerTask来完成这项工作,但 ...
- css div11
text-indent:30em; 缩进 font-family:"sans serif"文字的字体 border-width:1px; border-style:solid; ...
- 最新百度地图支持Fragment(注意事项)(转)
原文: 最新百度地图支持Fragment(注意事项) 开篇:老的百度地图通常都要继承MapActivity,这样不利于代码的可扩展性,再加上Fragment的流行,老的百度地图已经远远不能满足的大 ...
- mac地址静态捆绑,防止arp欺骗
arp -s 192.168.1.101 00-21-CC-D3-D5-FF 缺点,每次关机就还原,所以一般创建批处理文件,开机启动. ping 192.168.1.100 -l 65500 多台肉鸡 ...
- USACO Section 1.3 Mixing Milk 解题报告
题目 题目描述 Merry Milk Makers 公司的业务是销售牛奶.它从农夫那里收购N单位的牛奶,然后销售出去.现在有M个农夫,每个农夫都存有一定量的牛奶,而且每个农夫都会有自己的定价.假设所有 ...
- zookeeper常用sehll命令
ZooKeeper服务命令: 在准备好相应的配置之后,可以直接通过zkServer.sh 这个脚本进行服务的相关操作 1. 启动ZK服务: sh bin/zkServer.sh start ...
- Struts2--默认Action
何时使用: 访问的网页不存在, 显示错误页面, 或者显示主页. 有时存在一种情况, 就是找不到对应action 可以在struts.xml里设置一个默认的action <?xml versio ...
- CodeForces 616B Dinner with Emma
水题 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; +; ...
- JS基础知识(五)
内置对象 定义:JS语言自己定义的一些对象,供开发者使用. 常用内置对象: 1.Arguments对象 arguments.length 返回实参的个数 他只在正运行的函数内部使用.argument ...