怎样遍历所有线程?(我只有那么多分数了)(15分)

  • 主题发起人 主题发起人 emildy
  • 开始时间 开始时间
procedure TForm1.Button11Click(Sender: TObject);
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FThreadEntry32: TThreadEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
FThreadEntry32.dwSize := Sizeof(FThreadEntry32);
ContinueLoop := Thread32First(FSnapshotHandle,FThreadEntry32);
while ContinueLoopdo
begin
//线程相关信息在结构TThreadEntry32中
ContinueLoop := Thread32Next(FSnapshotHandle,FThreadEntry32);
end;
end;
 
穷成这样,真可怜。
 
提醒一下:在uses中加上对tlhelp32的引用。
 
Reboot的代码的确能用,但是找出来的似乎是所有的进程了,
但我只想要我自己程序里的进程,这要怎么办呢?请帮帮忙吧...
 
或者换一个问题:
我已知我自己的一个进程的ID号,那么我在另一个进程中怎样来访问前一个进程呢?
 
改一下原来的程序就行吧——
var
MyProcessId, PrvId: DWORD;//new
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FThreadEntry32: TThreadEntry32;
begin
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
FThreadEntry32.dwSize := Sizeof(FThreadEntry32);
ContinueLoop := Thread32First(FSnapshotHandle,FThreadEntry32);
GetWindowThreadProcessId(Handle, @MyProcessId);//new
PrvId := FThreadEntry32.th32OwnerProcessID;//new
while ContinueLoopdo
begin
//线程相关信息在结构TThreadEntry32中
ContinueLoop := Thread32Next(FSnapshotHandle,FThreadEntry32);
if FThreadEntry32.th32OwnerProcessID = MyProcessId then
Break;//new
PrvId := FThreadEntry32.th32OwnerProcessID;//new
end;
CloseHandle(FSnapshotHandle);//new
ShowMessage(Format('Previous ProcessId is: %x', [PrvId]));//new
end;
不过你说“在另一个进程中”不知道什么意思?
 
多人接受答案了。
 
后退
顶部