delphi7 已知进程PID,怎样通过PID获取进程窗体的句柄,

delphi7 已知进程PID,怎样通过PID获取进程窗体的句柄,,第1张

通过Delphi获得当前所有进程名,进程PID

代码如下

// 获取系统当前进程名和进程ID,

//注:应引用"TLHelp32"单元"use TLHelp32"。

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ComCtrls, StdCtrls,TLHelp32;

type

TForm2 = class(TForm)

ListBox1: TListBox;

ListView1: TListView;

Button1: TButton;

Button2: TButton;

procedure FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

ContinueLoop:BOOL; //是否继续循环

FSnapshotHandle:THandle; //进程快照句柄

FProcessEntry32:TProcessEntry32; //进程入口的结构体信息

implementation

{$R dfm}

procedure TForm2Button1Click(Sender: TObject);

//在listview中显示进程

var

NewItem: TListItem;

Summ:integer;

begin

ListView1ItemsBeginUpdate;

ListView1ItemsClear;

FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

//CreateToolhelp32Snapshot函数得到进程快照

FProcessEntry32dwSize := Sizeof(FProcessEntry32); //初始化

ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

//Process32First 得到一个系统快照里第一个进程的信息

Summ := 0;

while ContinueLoop do

begin

Summ := Summ + 1;

NewItem := ListView1ItemsAdd; //在ListView1显示

NewItemImageIndex := -1;

NewItemCaption := ExtractFileName(FProcessEntry32szExeFile); //进程名称

//NewItemCaption := ExtractFilePath(FProcessEntry32szExeFile);//进程名称

NewItemsubItemsAdd(FormatFloat('00', Summ));//序号

NewItemsubItemsAdd(IntToStr(FProcessEntry32th32ProcessID));//进程ID

ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32);

end;

CloseHandle(FSnapshotHandle);

ListView1ItemsEndUpdate;

Label1Caption:='进程数:'+inttostr(ListView1ItemsCount);

end;

procedure TForm2Button2Click(Sender: TObject);

//在listbox中显示进程 id

var

ProcessName : string; //进程名

ProcessID : integer; //进程表示符

begin

FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); //创建一个进程快照

FProcessEntry32dwSize:=Sizeof(FProcessEntry32);

ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32); //得到系统中第一个进程

//循环例举

while ContinueLoop do

begin

ProcessName := FProcessEntry32szExeFile;

ProcessID := FProcessEntry32th32ProcessID;

Listbox1Itemsadd('应用程序名 :'+ProcessName +'#进程ID:'+ inttostr(ProcessID));

ContinueLoop:=Process32Next(FSnapshotHandle,FProcessEntry32);

end;

end;

procedure TForm2FormCreate(Sender: TObject);

begin

//对ListView1的初始化

ListView1ViewStyle:=vsReport; //设置ListView的显示方式 不设置这种方式不显示列头

ListView1ColumnsAdd; //添加第一列

ListView1Column[0]Caption:='进程名';

ListView1Column[0]AutoSize:=false;

ListView1Column[0]Width:=100;

ListView1Column[0]Alignment:=taLeftJustify;//左对齐

ListView1ColumnsAdd; //添加第二列

ListView1Column[ListView1ColumnsCount-1]Caption:='序号';

ListView1Column[ListView1ColumnsCount-1]AutoSize:=true;

ListView1Column[ListView1ColumnsCount-1]Alignment:=taLeftJustify;//左对齐

ListView1ColumnsAdd; //添加第三列

ListView1Column[ListView1ColumnsCount-1]Caption:='ID';

ListView1Column[ListView1ColumnsCount-1]AutoSize:=true;

ListView1Column[ListView1ColumnsCount-1]Alignment:=taLeftJustify;//左对齐

end;

end

窗口1取窗口句柄() 取进程PID (窗口1句柄, 当前进程PID)版本 2DLL命令 取进程PID, 整数型, "user32", "GetWindowThreadProcessId", 公开, 获取与指定窗口关联在一起的一个进程和线程标识符

参数 hwnd, 整数型, , 指定的窗口句柄(窗口)

参数 lpdwProcessID, 整数型, 传址, 用作装载返回的PID变量

有id的话,

1、用OpenProcess通过ID打开进程,获得进程句柄(windowsh,kernel32lib)

2、用GetProcessImageFileName获得程序名(psapih,kernel32lib或psapilib)

以上就是关于delphi7 已知进程PID,怎样通过PID获取进程窗体的句柄,全部的内容,包括:delphi7 已知进程PID,怎样通过PID获取进程窗体的句柄,、易语言如何取自身进程ID 和 句柄、由程序进程id或窗口句柄如何获得程序名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址: http://outofmemory.cn/web/9427015.html

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

发表评论

登录后才能评论

评论列表(0条)

保存