Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.48 MB
Время: 0.012 c
15-1180318824
Slider007
2007-05-28 06:20
2007.06.24
С днем рождения ! 28 мая


2-1180031134
DemonP
2007-05-24 22:25
2007.06.24
отлов выхода из спящего режима


2-1180536974
stud
2007-05-30 18:56
2007.06.24
ничего не понимаю!!!!!


3-1175522974
Stenfit
2007-04-02 18:09
2007.06.24
Запрос на выбор месяца по текущему месяцу


15-1180444764
lookin
2007-05-29 17:19
2007.06.24
Кабель сетевой, хаб etc...




   Наверх