Как получить список потоков процесса
Получить дескриптор процесса просто, достаточно вызвать функцию GetCurrentProcessId.
Получение списка потоков процесса - уже не такая тривиальная задача, так как не
существует функции перебора потоков процесса. И правильно, зачем процессу «знать»,
какие потоки он породил? Вот потоки содержат информацию о родительском процессе. Это и
дает информацию к тому, как мы будем решать задачу:
uses
TlHelp32, Windows;
procedure TForm1.GetThreadIDsButtonClick(Sender: TObject);
var
ThreadSnapshotHandle: THandle;
ThreadFound: Boolean;
ThreadEntry: tagTHREADENTRY32;
ProcessID: Cardinal;
begin
ProcessID := GetCurrentProcessId;
// Флаг TH32CS_SNAPTHREAD делает снимок потоков.
ThreadSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
try
ThreadEntry.dwSize := SizeOf(ThreadEntry);
ThreadFound := Thread32First(ThreadSnapshotHandle, ThreadEntry);
if ThreadFound then
repeat
if ThreadEntry.th32OwnerProcessID = ProcessID then
ThreadIDMemo.Lines.Add(IntToStr(ThreadEntry.th32ThreadID));
until not Thread32Next(ThreadSnapshotHandle, ThreadEntry);
finally
CloseHandle(ThreadSnapshotHandle);
end;
end;
|
Здесь, в тестовом примере, дескрипторы потоков процесса выводятся в ThreadIDMemo.
Вы можете скачать исходники демонстрационного проекта
(Delphi 7) (2 кБ).
Смотрите также:
|