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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.042 c
2-1180792497
BigLamer
2007-06-02 17:54
2007.06.24
Ось координат графика


15-1180001590
XPMan
2007-05-24 14:13
2007.06.24
Виста


15-1180025838
Витян
2007-05-24 20:57
2007.06.24
Зачем мне нужна электронная почта??


9-1154586671
vladimirg88
2006-08-03 10:31
2007.06.24
картинка внлубь монитора


2-1180512545
MAXH0
2007-05-30 12:09
2007.06.24
Взаимодействие с другим приложением





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский