PDA

View Full Version : kill کردن thread های یک پروسه



Mask
سه شنبه 04 اسفند 1388, 15:28 عصر
با سلام
یک پروسه دارم به نام ali.exe
اول می خام thread های این پروسه رو پیدا کنم و بعد ببندمشون یا kill کنم.
چطوری باید این کار رو کرد.
ممنون.

شبیر کریمی
سه شنبه 04 اسفند 1388, 20:14 عصر
برای بستن thread:
http://www.barnamenevis.org/forum/showthread.php?t=193027

برای بدست آوردن thread های متعلق به یک پروسه توضیحات این تابع رو در sdk بخونید:
CreateToolhelp32Snapshot

vcldeveloper
چهارشنبه 05 اسفند 1388, 12:45 عصر
اگر از ProcessInfo استفاده می کنید، می تونید به این صورت Threadهای یک Process را Kill کنید:

var
AProcess: TProcessItem;
i : Integer;
begin
AProcess := ProcessInfo1.RunningProcesses.FindByName('notepad. exe');
if Assigned(AProcess) then
begin
for i := 0 to AProcess.Threads.Count-1 do
AProcess.Threads[i].TerminateThread;
end;
end;

Mask
پنج شنبه 06 اسفند 1388, 02:00 صبح
ممنون آقای کشاورز
من متوجه میشم کد شما چطوری عمل میکنه اما وقتی از کدتون استفاده میکنم از TProcessItem ایراد میگیره.
بنده از دلفی 7 استفاده میکنم.

Mahmood_M
پنج شنبه 06 اسفند 1388, 03:00 صبح
ممنون آقای کشاورز
من متوجه میشم کد شما چطوری عمل میکنه اما وقتی از کدتون استفاده میکنم از TProcessItem ایراد میگیره.
بنده از دلفی 7 استفاده میکنم.
باید کامپوننت TProcessInfo (http://vcldeveloper.com/products/products-components/process-info/) رو نصب کرده باشید ...

__Genius__
پنج شنبه 06 اسفند 1388, 03:21 صبح
http://vcldeveloper.com/products/products-components/process-info/

vcldeveloper
جمعه 07 اسفند 1388, 12:10 عصر
من متوجه میشم کد شما چطوری عمل میکنه اما وقتی از کدتون استفاده میکنم از TProcessItem ایراد میگیره.
چه ایرادی از اون کلاس میگیره؟ من در اون کد فرض را بر این گذاشتم که شما کامپوننت ProcessInfo را نصب کردید، و آن را روی یکی از فرم های برنامه تان انداختید. اگر نمیخواید کامپوننت را نصب کنید، یا نمی خواید از طریق طراح فرم دلفی کامپوننت را ایجاد کنید، باید یونیت ProcessInfo را خودتان به لیست uses اضافه کنید، و یک شی از کلاس TProcessInfo بسازید:

uses ProcessInfo;

procedure TerminateProcessThreads(const ProcessName: string);
var
ProcessInfo : TProcessInfo;
AProcess : TProcessItem;
i : integer;
begin
ProcessInfo := TProcessInfo.Create(nil);
try
AProcess := ProcessInfo.RunningProcess.FindByName(ProcessName) ;
if Assigned(AProcess) then
begin
for i := 0 to AProcess.Threads.Count-1 do
AProcess.Threads[i].TerminateThread;
end;
finally
ProcessInfo.Free;
end;
end;

اگر چند ماه یا چند هفته پیش این کامپوننت را دانلود کرده بودید، بهتر هست که مجددا آن را دانلود کنید، چون من چند وقت پیش یک نسخه جدید از آن ارائه کردم، و چند روز پیش یکسری کامپایلهای شرطی آن را تغییر دادم تا در نسخه های قدیمی دلفی بهتر کار کنه.