Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];

Вниз

Убить Процесс   Найти похожие ветки 

 
Yaro   (2002-02-10 01:00) [0]

Как убить процесс, если известно его имя?


 
pasha676   (2002-02-11 11:29) [1]

CloseHandle(MyThread) где MyThread - хэндл на поток. Это если ты запускаешь парралельный поток с помощью CreateThread

Если ты запускаешь другой exe файл с помощью CreateProcess
то закрыть его можно послав ему (процессу) месагу
PostMessage(MyHandle, WM_CLOSE,0,0); где MyHandle - соответственно его хэндл.


 
Севостьянов Игорь   (2002-02-11 14:32) [2]

У меня другой вариант, хотя я не считаю что это правильно убивать по имени процесса, ведь имя не есть уникальный параметр
по всем вопросам по мылу. Ну и вот собственно рабочий пример:

unit Main;

interface

uses
Windows, SysUtils, Classes, Forms, Dialogs,
Controls, StdCtrls, PSAPI;

type
TfrmMain = class(TForm)
btnTreminate: TButton;
procedure btnTreminateClick(Sender: TObject);
function GetProcesses(const ProcessName: PChar; var Error: DWORD; var Source: string): BOOL;
end;

var
frmMain: TfrmMain;

implementation

{$R *.DFM}


procedure TfrmMain.btnTreminateClick(Sender: TObject);
var
Error: DWORD;
Source: string;
begin
if not GetProcesses("internet.exe", Error, Source)
then ShowMessage(Format("Error: %x"#13#10"Error: %s"#13#10"Source: %s",
[Error, SysErrorMessage(Error), Source]));
end;

function TfrmMain.GetProcesses(const ProcessName: PChar; var Error: DWORD; var Source: string): BOOL;
var
hProc : THANDLE;
aProcesses : array [0..1023] of DWORD;
cbNeeded,
cProcesses,
hMod : DWORD;
szProcessName : array [0..255] of Char;
i : integer;
uiExitCode : UINT;

procedure SetErrorSource(Err: DWORD; Src: string);
begin
Error := Err;
Source := Src;
SetLastError(0);
end;

begin
Result := False;
uiExitCode := DWORD(-1);

if EnumProcesses(@aProcesses, SizeOf(aProcesses), cbNeeded) then // получаем список идентификаторов
// всех запущенных процессов
begin
cProcesses := Trunc(cbNeeded / sizeof(DWORD));
for i:=0 to cProcesses-1 do // итерируем по процессам
begin
//PROCESS_TERMINATE
hProc := OpenProcess(PROCESS_ALL_ACCESS, FALSE, aProcesses[i]); // получаем хендл процесса по его пиду
if (hProc <> 0) then
begin
if EnumProcessModules(hProc, @hMod, SizeOf(hMod), cbNeeded) then // получаем список модулей процесса
begin
if GetModuleBaseName(hProc, hMod, szProcessName, SizeOf(szProcessName)) <> 0 then // получаем имя главного модуля
begin
if (StrIComp(szProcessName, ProcessName) = 0) then // наш процесс?
begin
Result := TerminateProcess(hProc, uiExitCode); // останавливаем процесс
SetErrorSource(GetLastError, "TerminateProcess");
Exit;
end
else
SetErrorSource(0, "Process with such name is not found");
end
else
SetErrorSource(GetLastError, "GetModuleBaseName");
end
else
SetErrorSource(GetLastError, "EnumProcessModules");
end
else
SetErrorSource(GetLastError, "OpenProcess");
end;
end
else
SetErrorSource(GetLastError, "EnumProcesses");
end;

end.




Страницы: 1 вся ветка

Форум: "WinAPI";
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.008 c
3-32683
Stratos
2002-03-21 09:27
2002.04.11
Interbase: явная транзакция


14-32957
метеоролог
2002-02-26 10:25
2002.04.11
Компонент для Delphi-3


1-32754
Yu
2002-03-28 10:30
2002.04.11
Всем привет


1-32746
IGI
2002-03-29 12:57
2002.04.11
Файлы


1-32727
ola
2002-03-29 06:04
2002.04.11
Help!!!! Помогите, уважаемые мастера....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский