如何获取当前所有进程的名字,就是进程管理器中看到的。

wshuo 2003-09-09 11:09:50
如何获取当前所有进程的名字,就是进程管理器中看到的。
...全文
167 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
year2000bug 2003-10-08
  • 打赏
  • 举报
回复
up
yjy1001 2003-10-08
  • 打赏
  • 举报
回复
呵呵~~ 很容易
zjpwm2000 2003-09-28
  • 打赏
  • 举报
回复
to:Drate 你的方法在windows nt中是不行的,一看代码就知道是随便在别的地方拷贝!
guothreelove2003 2003-09-28
  • 打赏
  • 举报
回复
用GetWindowText得到程序名,不过你要先得到程序的窗体句柄,这个可用EnumWindows
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
TForm1 = class(TForm)
ListBox1: TListBox;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function EnumWndProc(AWnd:HWND;AlParam:LPARAM):Boolean;stdcall;
var
Form1: TForm1;

implementation

{$R *.DFM}

function EnumWndProc(AWnd: HWND; AlParam: LPARAM):Boolean;stdcall;
var
WndCaption: array[0..254] of Char;
begin
if IsWindowVisible(AWnd) then
begin
GetWindowText(AWnd, @WndCaption, 254);

if WndCaption[0]<>chr(0) then
Form1.ListBox1.Items.Add(Format('%d = %s',[AWnd,StrPas(WndCaption)]));
end;

Result := True;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
EnumWindows(@EnumWndProc,0);
end;

end.
guothreelove2003 2003-09-17
  • 打赏
  • 举报
回复
up
wshuo 2003-09-10
  • 打赏
  • 举报
回复
好,那么怎么看见程序的名字,就是Windows任务管理器的应用程序中看见的。
Delphi_Li 2003-09-09
  • 打赏
  • 举报
回复
看看Delphi 5开发人员指南那本书,上面有一个完整的例子!!!
cxz7531 2003-09-09
  • 打赏
  • 举报
回复
up
Drate 2003-09-09
  • 打赏
  • 举报
回复
(注意uses TLHelp32)
然后
var lppe: TProcessEntry32;
found : boolean;
Hand : THandle;
begin
Hand := CreateToolhelp32Snapshot(TH32CS_SNAPALL,0);
found := Process32First(Hand,lppe);
while found do
begin
ListBox.Items.Add(StrPas(lppe.szExeFile));//列出所有进程。
found := Process32Next(Hand,lppe);
end;
end;

/////////////////////////////////////////////////////
uses ... TLHelp32, ...

type
TForm1 = class(TForm)
...
end;

var
Form1: TForm1;
l : Tlist; ////返回的东东在"L"这个TList中。

type
TProcessInfo = Record
ExeFile : String;
ProcessID : DWORD;
end;
pProcessInfo = ^TProcessInfo;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var p : pProcessInfo;
i : integer;
ContinueLoop:BOOL;
var
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
begin
l := TList.Create;
l.Clear;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do
begin
New(p);
p.ExeFile := FProcessEntry32.szExeFile;
p.ProcessID := FProcessEntry32.th32ProcessID;
l.Add(p);
ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);
end;
end;

procedure TForm1.FormDestroy(Sender: TObject);
var p : pProcessInfo;
i : integer;
begin
With l do
for i := Count - 1 DownTo 0 do
begin p := items[i]; Dispose(p); Delete(i); end;
end;

...
end.

dawnming 2003-09-09
  • 打赏
  • 举报
回复
up
coolfilm 2003-09-09
  • 打赏
  • 举报
回复
用WIN32API的进程快照啥!一个循环搞定!WWW。TOPTANG。COM 有原码下载!

1,184

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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