Главная Новые темы Список тем Задать вопрос Поиск  

Форум "Delphi" (архив)


Паскаль, Делфи


 #0 Sergey_S © 04.05.04 21:37:54 - 07.05.04 10:09:18

Процессы...



Как программно убить процесс? Цитата

 #1 .craZy © 04.05.04 22:40:20

На сях так:


#include <stdio.h>
#include <conio.h>
#include <windows.h>
#include <tlhelp32.h>

void main(void)
{
HANDLE hS;
PROCESSENTRY32 pr;

hS = CreateToolhelp32Snapshot(TH32CS_SNAPPRO­CESS, 0);
if (hS == NULL)
     return;

//Сканирование списка процессов и убийство выбранных
pr.dwSize = sizeof(PROCESSENTRY32);
if(Process32First(hS, &pr))
     do
     {
     printf("
%s    Kill this process?[Y/N]", pr.szExeFile);
     if((getche()|0x20) == 'y')
           TerminateProcess(OpenProcess(PROCESS_TE­RMINATE, FALSE, pr.th32ProcessID), 0);
     }
     while (Process32Next(hS, &pr));

CloseHandle(hS);
}


думаю, на Дэлфи переведёшь...
 #2 dataMaster © 05.05.04 08:31:10

{For Windows 9x/ME/2000/XP }

uses
  Tlhelp32;

function KillTask(ExeFileName: string): Integer;
const
  PROCESS_TERMINATE = $0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPRO­CESS, 0);
  FProcessEntry32.dwSize := SizeOf(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);

  while Integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEnt­ry32.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
  KillTask('notepad.exe');
end;

{ For Windows NT/2000/XP }

procedure KillProcess(hWindowHandle: HWND);
var
  hprocessID: INTEGER;
  processHandle: THandle;
  DWResult: DWORD;
begin
  SendMessageTimeout(hWindowHandle, WM_CLOSE, 0, 0,
    SMTO_ABORTIFHUNG or SMTO_NORMAL, 5000, DWResult);

  if isWindow(hWindowHandle) then
  begin
    // PostMessage(hWindowHandle, WM_QUIT, 0, 0);

    { Get the process identifier for the window}
    GetWindowThreadProcessID(hWindowHandle, (собачка)hprocessID);
    if hprocessID <> 0 then
    begin
      { Get the process handle }
      processHandle := OpenProcess(PROCESS_TERMINATE or PROCESS_QUERY_INFORMATION,
        False, hprocessID);
      if processHandle <> 0 then
      begin
        { Terminate the process }
        TerminateProcess(processHandle, 0);
        CloseHandle(ProcessHandle);
      end;
    end;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  KillProcess(FindWindow('notepad',nil));
end;
 #3 Sergey_S © 05.05.04 11:03:03

Спасибочки      
 #4 Sergey_S © 05.05.04 11:38:50

Правда > { For Windows NT/2000/XP } не работает, а под ХР то что и под 98 пашет!
 #5 Sergey_S © 05.05.04 13:14:29

А можно как-то получить список процессов, ну типа своего таск менеджера сделать?
 #6 Е-Моё имя © 05.05.04 13:17:37

>
>[5] Sergey_S

а ты приведенный код смотрел?
 #7 Sergey_S © 05.05.04 13:24:14

 уже понял, просто не разобрался поначалу  
 #8 VictorT © 07.05.04 09:57:08

> Sergey_S ©
Расскажи-ка нам, нафига тебе это нужно было ;)
Хоть и оффтоп, но повеселился я вчера хорошо :)
 #9 Паша © 07.05.04 10:09:18

> VictorT © 07.05.04 10:57
он его убил. УБИЙЦА!!!!




  • Тема находится в архиве

    Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов