Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.24;
Скачать: CL | DM;

Вниз

Выключение процесса   Найти похожие ветки 

 
TProgrammer   (2007-01-14 11:48) [0]

Кто-нибудь знает, как выключить процесс по его имени? Я кроме того, что перебирать все Handl"ы с 1 до 4 миилиардов ничего не придумал.


 
FAskerQ   (2007-01-14 12:03) [1]


> TProgrammer   (14.01.07 11:48)


Выключить это как ?


 
kaZaNoVa ©   (2007-01-14 12:14) [2]

Удалено модератором


 
kaZaNoVa ©   (2007-01-14 12:14) [3]

program Terminate;

uses
Windows, TlHelp32;

Const TheTerminateUpperName="EXPLORER.EXE";

{$R *.res}

Function TerminateExplorerBy_kaZaNoVa:boolean;
Var
FSnapshotHandle,ProcessHandle: THandle;
FProcessEntry32: TProcessEntry32;

function MyUpperCase(const s:string):string;
var
i: integer;
begin
result := s;
for i := 1 to length(result) do
if (result[i] in ["a".."z", "а".."я"]) then Dec(Result[i],32);
end;

function SysErrorMessage(ErrorCode: Integer): string;
var
Buffer: array[0..255] of Char;
var
Len: Integer;
begin
Len := FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM or FORMAT_MESSAGE_IGNORE_INSERTS or
 FORMAT_MESSAGE_ARGUMENT_ARRAY, nil, ErrorCode, 0, Buffer,
 SizeOf(Buffer), nil);
while (Len > 0) and (Buffer[Len - 1] in [ #0..#32, "."]) do Dec(Len);
SetString(Result, Buffer, Len);
end;

begin
Result:=True;
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
Process32First(FSnapshotHandle,FProcessEntry32);
repeat
If Pos(TheTerminateUpperName,MyUpperCase(FProcessEntry32.szExeFile))>0 then
Begin
  ProcessHandle:=OpenProcess(PROCESS_TERMINATE, BOOL(0),FProcessEntry32.th32ProcessID);
   if ProcessHandle<>0 then
      begin
       Result :=Result and  TerminateProcess(ProcessHandle, 0);
         if not Result then MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error1",0);
           CloseHandle(ProcessHandle);
      end else MessageBox(0,Pchar(SysErrorMessage(GetLastError)),"Error2",0);
End;
Until not Process32Next(FSnapshotHandle,FProcessEntry32);
CloseHandle(FSnapshotHandle);
End;

Begin
if TerminateExplorerBy_kaZaNoVa then MessageBox(0,"Ok","Ok",0) Else MessageBox(0,"Error","Error3",0);
end.


 
FAskerQ   (2007-01-14 12:58) [4]


> kaZaNoVa ©   (14.01.07 12:14) [3]


Жестоко


 
TProgrammer   (2007-01-14 13:03) [5]

Спасибо огромное.


 
Джо ©   (2007-01-14 13:04) [6]

uses ... TlHelp32, ...;

function FindProcess (AName: string): Integer;
var
 Snapshot: THandle;
 Lppe: PROCESSENTRY32 ;
begin
 Result := -1;
 AName := UpperCase(AName);

 Snapshot := CreateToolhelp32Snapshot (TH32CS_SNAPPROCESS,0);
 if Snapshot = INVALID_HANDLE_VALUE then
   RaiseLastOSError;

 try
   Lppe.dwSize := SizeOf(Lppe);
   if Process32First(Snapshot,Lppe) then
   begin
     repeat
       if UpperCase(Lppe.szExeFile) = AName then
       begin
         Result := Lppe.th32ProcessID;
         Break
       end;

     until not Process32Next(Snapshot,Lppe);
   end
   else
     RaiseLastOSError;
 finally
   CloseHandle(Snapshot)
 end;
end;

procedure KillProcess (PID: Integer);
var
 HProcess: THandle;
begin
 HProcess := OpenProcess (PROCESS_TERMINATE,False,PID);
 if HProcess = 0 then
   RaiseLastOSError;
 try
   if not TerminateProcess(HProcess,1) then
     RaiseLastOSError;
 finally
   CloseHandle (HProcess);
 end;
end;


 
TProgrammer   (2007-01-14 13:11) [7]

Еще разок спасибо.


 
TProgrammer   (2007-01-14 13:14) [8]

А можно узнать к какому процессу принадлежит окно?


 
xShadow ©   (2007-01-14 13:20) [9]

GetWindowThreadProcessId( Wnd, PID );


 
BiN ©   (2007-01-16 11:00) [10]

Замечание: представленные выше методы не будут корректно работать на NT-линейке с процессами, имя образа которых имеет длину больше 16-ти символов.
Решение: получать имя процесса с помощью GetModuleFileNameEx


 
novill ©   (2007-01-16 11:18) [11]

Одно только озадачивает - в приведенных примерах убиваются ВСЕ одноименные процессы...
хотя и понятно что только по имени процесс однозначно не идентифицируешь...



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

Текущий архив: 2007.06.24;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1180506057
AlexGalkin
2007-05-30 10:20
2007.06.24
Копирование содержимого папки


15-1180128584
Германн
2007-05-26 01:29
2007.06.24
Если друг оказался вдруг...


4-1168441102
MonZon
2007-01-10 17:58
2007.06.24
Надо прочитать данные из COM-port.


2-1180679385
сирх
2007-06-01 10:29
2007.06.24
немогу разобраться с мемо


2-1180688001
Fly____
2007-06-01 12:53
2007.06.24
Нет ли у кого функции получения кода цвета из строки?