PDA

View Full Version : آیا در دلفی ThreadID داریم؟



amir_633
چهارشنبه 08 خرداد 1387, 15:34 عصر
سلام.آیا در دلفی ThreadID داریم؟
اگه جوابتان مثبت است چگونه میتوان آن را به دست آورد؟
من ProccessID مربوط به اون Thread رو دارم.

B_YAGHOBI
چهارشنبه 08 خرداد 1387, 16:42 عصر
function GetProcessID(ProcessName : string ) : DWORD ;
var
Handle:tHandle;
Process:tProcessEntry32;
GotProcess:Boolean;
begin
Handle:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,0) ;
Process.dwSize:=SizeOf(Process);
GotProcess := Process32First(Handle,Process);
{$B-}
if GotProcess and (Process.szExeFile<>ProcessName) then
repeat
GotProcess := Process32Next(Handle,Process);
until (not GotProcess) or (Process.szExeFile=ProcessName);
{$B+}
if GotProcess then Result := Process.th32ProcessID
else Result := 0;
CloseHandle(Handle);
end ;

///////////////////////////////////////////////////////////////////
function GetThreadID(ProcessID : DWORD ) : DWORD ;
var
Handle:tHandle;
ThreadEntry : ThreadEntry32;
GotThread : Boolean;
begin

Handle:=CreateToolHelp32SnapShot(TH32CS_SNAPTHREAD ,0);
ThreadEntry.dwSize:=SizeOf(ThreadEntry);
GotThread := Thread32First(Handle, ThreadEntry);
{$B-}
if GotThread and (ThreadEntry.th32OwnerProcessID <> ProcessID) then
repeat
GotThread := Thread32Next(Handle,ThreadEntry);
until (not GotThread) or (ThreadEntry.th32OwnerProcessID = ProcessID ) ;
{$B+}
if GotThread then Result := ThreadEntry.th32ThreadID
else Result := 0;
CloseHandle(Handle);
end ;



// Sample
procedure TForm1.Button1Click(Sender: TObject);
Var ProcessID, ThreadID : DWORD ;
begin
ProcessID := GetProcessID( 'svchost.exe' ) ;
if ProcessID > 0 then

ThreadID := GetThreadID( ProcessID ) ;
Caption := 'ProcessID='+IntToStr(ProcessID) + ' ThreadID='+IntToStr(ThreadID) ;
end;

مهران موسوی
چهارشنبه 08 خرداد 1387, 16:44 عصر
براي كسب اطلاعات بيشتر و ديدن نمونه هايي از استفاده از اين تابع ميتونيد يك سري به MSDN - Windows SDK - API Guide بزنيد و به نتيجه ي مطلوب برسيد ...

يا حق ...

ويرايش شد :

اقاي يعقوبي لطف كرد و مثال كامل رو براتون گذاشت ..