استخدم كل من CreateToolhelp32Snapshot / Process32First / Process32Next لتحصل على قائمة بالبرامج التي تعمل
ومن بينها ابحث عن الذي تريد ايقافه ان وجدته استخدم OpenProcess ثم TerminateProcess
السلام عليكم
اليك هذا المثال بالمرفقات
عليك فقط كتابه اسم العمليه التي تود اغلاقها .exe
PHP كود :
uses Psapi, tlhelp32;
function KillTask(ExeFileName: string): Integer; const PROCESS_TERMINATE = $0001; var ContinueLoop: BOOL; FSnapshotHandle: THandle; FProcessEntry32: TProcessEntry32; begin Result := 0; FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); FProcessEntry32.dwSize := SizeOf(FProcessEntry32); ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); while Integer(ContinueLoop) <> 0 do begin if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = UpperCase(ExeFileName))) then Result := Integer(TerminateProcess( OpenProcess(PROCESS_TERMINATE, BOOL(0), FProcessEntry32.th32ProcessID), 0)); ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); end; CloseHandle(FSnapshotHandle); end;
procedure TForm1.Button1Click(Sender: TObject); begin if Edit1.Text='' then ShowMessage('please write the process .EXE') else KillTask(Edit1.Text); end;
الشكرا الكبير لك يا اخي الكريم على هذه proccedure التى حلت لي مشكلة كبيرة وبارك الله فيك
شكرا لك لقد استخدمت هذه funcation ونجحت ولكن لنفس الجهاز
برنامجي موجود على الشبكة يقوم بنسخ ملف outlook\Outlook.PST من جميع الاجهزة الى server
والمشكلة هو لن يتم النسخ اذا كان outlook.exe يعمل وهذا البرنامج ساعدني كثيرا ولكن ليس عن طريق الserver الوصول الى process في اي clint وقفل outlook.exe من process في هذه clint
وهذه فكرة على البرنامج
PHP كود :
DATA.Close; DATA.SQL.Clear; DATA.SQL.ADD('SELECT * FROM T1'); DATA.Open; while not data.Eof do begin // KillTask( الامر الخاص بالوصول copyFile(pchar('\\'+DATA.FIELDBYNAME ('pcname').AsString+'\outlook\Outlook.PST'),pchar('c:\share\backup outlook\'+DATA.FIELDBYNAME('userNAME').AsString+'\Outlook.PST'),true); data.next; end; close;