delphi获取Windows系统的进程运行信息
delphi获取Windows系统的进程运行信息
自从出现windows系统以来,各种各样的软件层出不穷。购买或者免费下载以后,轻轻点击Install或者Setup以后,稍作些许简单配置就完成安装的整个过程。显然这给用户带来了许多方便,但对用户来说这些软件似乎是个"黑匣子",展现在用户面前的仅仅是华丽的外表和简洁的操作,至于软件运行过程中调用了哪些文件和模块文件就无法知道了。或许真正希望了解这些的用户并不是很多,甚至对某些用户来说是不必要的,但是对于一个系统安全管理员来说这是一件很重要的事情。本文重点阐述如何获取系统的所有进程以及进程运行过程中所调用的模块文件(象EXE、DLL文件),实际是对Windows系统所提供的任务管理器进一步完善,开发工具采用Delphi语言。
一、函数介绍
在Windows系统中动态链接库kernel32.dll提供了获取和处理系统进程的许多接口函数,Delphi语言把这些函数接口封装到Tlhelp32.pas中,供Delphi用户开发过程调用。要详细了解相关知识可以查阅Tlhelp32.pas原文件和Windows SDK提供的帮助文件。其中同本文涉及的接口函数主要有CreateToolhelp32Snapshot、process32first、process32next、module32first、module32next五个函数以及TMODULEENTRY32、TPROCESSENTRY32两个数据结构。
1、CreateToolhelp32Snapshot
该函数是要实现上述目的最核心的一个函数,它可以获取系统运行进程(Process)列表、线程(Thread)列表和指定运行进程的堆(Heap)列表、调用模块(Module)列表。如果函数运行成功将返回一个非零"Snapshot"句柄,通过该句柄调用相关WinAPI函数就可以实现上述目的,其函数格式为:
HANDLE WINAPI CreateToolhelp32Snapshot(DWORD dwFlags,
DWORD th32ProcessID);
参数说明:
dwFlags参数:对函数建立的"Snapshot"所包含的列表类型,可选项包括:
TH32CS_SNAPHEAPLIST:所创建的Snapshot包含堆列表
TH32CS_SNAPMODULE :所创建的Snapshot包含调用模块列表
TH32CS_SNAPTHREAD :所创建的Snapshot包含线程列表;
TH32CS_SNAPPROCESS :所创建的Snapshot包含进程列表;
TH32CS_SNAPALL :所创建的Snapshot包含上述所有列表;
th32ProcessID参数:进程句柄参数,可以为零表示当前进程,该参数只对dwFlags包含TH32CS_SNAPMODULE、TH32CS_SNAPHEAPLIST可选项时起作用。当dwFlags为TH32CS_SNAPPROCESS,th32ProcessID为零时函数得到系统的所有进程列表。
2、Process32First、Process32Next、
相关文档:
名称 类型 说明
abort 函数 引起放弃的意外处理
abs 函数 绝对值函数
addexitproc 函数 将一过程添加到运行时库的结束过程表中
addr 函数 返回指定对象的地址
adjustlinebreaks 函数 将给定字符串的行分隔符调整为cr/lf序列
align 属 ......
一个很简单的问题,但我凭我学习C++/VC一年多,接触Delphi的时间也不短了,但仍然写不出来。
本来以为,不就是将Form1.Show和Form1.Hide么,但却就是达到不到自己想要的结果
这个问题倒不用作深入研究了,到是让我发现,Delphi也不是信手摘来,什么都是那么容易的,以为自己有点儿VC的底子,就小看了Delphi。
最近一段时 ......
procedure TForm1.Button1Click(Sender: TObject);
Var
Num: Integer;
Begin
Try
Num:=StrToInt(Edit1.Text);
Edit2.Text:=IntToStr(Num*Num);
Except
On EConvertError Do ShowMessage(Edit1.Text+'无法转成整数!');
......
制作圆角矩形的窗体:
01.procedure TPortForm.FormCreate(Sender: Tobject);
02.var hr :thandle;
03.begin
04.hr:=createroundrectrgn(0,0,width,height,20,20);
05.setwindowrgn(handle,hr,true);
06.end;
如果不要窗体外框,则使用:
01.procedure TPortForm.FormCreate(Sender: Tobject);
02.var hr :thandl ......
1) Error loading midas.dll 没有注册midas.dll 运行RegSver32.exe midas.dll
2)Result := GetProcAddress(FGDIPlusLibrary, PChar(ProcName));编译 出现这样的问题,应该是设置方面的问题,Project->Options->Complier->Hugestrings 钩上就ok了!
3) TCheckListBox有个itemEnable ......