delphi7无法读取新启动的进程
用delphi7读取系统进程,在本程序启动前的进程可以读取,在本程序启动后的进程则无法读取(比如本程序名为a.exe,在a.exe运行后在启动b.exe,则无法读取到b....
用delphi7读取系统进程,在本程序启动前的进程可以读取,在本程序启动后的进程则无法读取(比如本程序名为a.exe,在a.exe运行后在启动b.exe,则无法读取到b.exe
读取的方法用的是CreateToolhelp32Snapshot
snap:THandle;
lppe:tprocessentry32;
snap:=CreateToolhelp32Snapshot(15,0);
lppe.dwSize:=SizeOf(lppe);
while Process32Next(snap,lppe) do
begin
lv:=ListView1.Items.Add;
lv.Caption:=lppe.szExeFile;
pid:=lppe.th32ProcessID;
end; 展开
读取的方法用的是CreateToolhelp32Snapshot
snap:THandle;
lppe:tprocessentry32;
snap:=CreateToolhelp32Snapshot(15,0);
lppe.dwSize:=SizeOf(lppe);
while Process32Next(snap,lppe) do
begin
lv:=ListView1.Items.Add;
lv.Caption:=lppe.szExeFile;
pid:=lppe.th32ProcessID;
end; 展开
2个回答
2016-05-16
展开全部
电脑运行一段时间出现你说的问题,重启一下电脑就会好了,重启电脑是为了释放缓存,这不是一般的清理垃圾文件,这是正常的事情,加内存条可以延长时间,如果是CPU等硬件温度高引起的就休息会(可以反复这样做,有时CPU低、内存少、或操作时间长些会这样)。
Win78最基本能运行是4G内存,XP是2G内存,好用些加倍,如果您用的不是这个数,建议加内存(这是实践得出的数,不是理论的数)。
如果是操作什么卡引起的,你的电脑卡屏或死机的时候,你在电脑干什么呢,能说说吗?我会跟据你说的较为准确的回答你。
Win78最基本能运行是4G内存,XP是2G内存,好用些加倍,如果您用的不是这个数,建议加内存(这是实践得出的数,不是理论的数)。
如果是操作什么卡引起的,你的电脑卡屏或死机的时候,你在电脑干什么呢,能说说吗?我会跟据你说的较为准确的回答你。
追问
不懂就不要瞎扯,最烦这种人
展开全部
参考下面做
function GetFileNameFromHandle(Handle: hwnd):string;
var
PID: DWord;
aSnapShotHandle: THandle;
ContinueLoop: Boolean;
aProcessEntry32: TProcessEntry32;
begin
GetWindowThreadProcessID(Handle, @PID);
aSnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
ContinueLoop := Process32First(aSnapShotHandle, aProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if aProcessEntry32.th32ProcessID = PID then
begin
result:=aProcessEntry32.szExeFile;
break;
end;
ContinueLoop := Process32Next(aSnapShotHandle, aProcessEntry32);
end;
CloseHandle(aSnapShotHandle);
end;
function GetFileNameFromHandle(Handle: hwnd):string;
var
PID: DWord;
aSnapShotHandle: THandle;
ContinueLoop: Boolean;
aProcessEntry32: TProcessEntry32;
begin
GetWindowThreadProcessID(Handle, @PID);
aSnapShotHandle := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
aProcessEntry32.dwSize := SizeOf(aProcessEntry32);
ContinueLoop := Process32First(aSnapShotHandle, aProcessEntry32);
while Integer(ContinueLoop) <> 0 do
begin
if aProcessEntry32.th32ProcessID = PID then
begin
result:=aProcessEntry32.szExeFile;
break;
end;
ContinueLoop := Process32Next(aSnapShotHandle, aProcessEntry32);
end;
CloseHandle(aSnapShotHandle);
end;
追问
不是API的问题,好像是控件的问题,listview无法显示最后一个数据
追答
没有问题啊
最后两个是运行程序后才启动的进程。
procedure TForm1.Button1Click(Sender: TObject);
var
snap:THandle;
lppe:tprocessentry32;
lv: TlistItem;
PID: DWord;
begin
ListView1.Items.Clear;
snap:=CreateToolhelp32Snapshot(15,0);
lppe.dwSize:=SizeOf(lppe);
while Process32Next(snap,lppe) do
begin
lv:=ListView1.Items.Add;
lv.Caption:=lppe.szExeFile;
pid:=lppe.th32ProcessID;
end;
end;
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询