zabijanie procesów po ich nazwie

0

jak najkrócej i najprościej zabić proces w systemie znając jego nazwę, np chcę zabić proces o nazwie notepad.exe?

0
C:\Documents and Settings\Admin>taskkill /?

TASKKILL [/S system [/U nazwa_użytkownika [/P [hasło]]]]
         { [/FI filtr] [/PID id procesu | /IM nazwa obrazu] } [/F] [/T]

Opis:
    To narzędzie wiersza polecenia może służyć do zakończenia jednego lub
    więcej procesów.
    Procesy można kasować przy użyciu identyfikatora procesu lub nazwy obrazu.

Lista parametrów:
    /S    system               Określa system zdalny, z którym ma nastąpić
                               połączenie.

    /U    [domena\]użytkownik  Określa kontekst użytkownika, w którym
                               polecenie powinno być wykonane.

    /P    [hasło]              Określa hasło dla danego kontekstu użytkownika.
                               W razie pominięcia monituje o podanie danych.

    /F                         Określa wymuszenie zakończenia
                               procesów.

    /FI   filtr                Wyświetla zestaw zadań pasujących do
                               danych kryteriów określonych w filtrze.

    /PID  id procesu           Określa identyfikator PID procesu, który
                               ma być zakończony.

    /IM   nazwa obrazu         Określa nazwę obrazu procesu, który ma być
                               zakończony. Symbolu wieloznacznego '*' można
                               użyć do określenia wszystkich nazw obrazów.

    /T                         Przerwanie drzewa; kończy określony proces
                               i wszystkich procesów podrzędnych, które zostały
                               uruchomione przez dany proces.

    /?                         Wyświetla tę pomoc/sposób użycia.

Filtry:
    Nazwa filtru   Prawidłowe operatory      Prawidłowe wartości
    ------------   --------------------      -------------------
    STATUS         eq, ne                    RUNNING | NOT RESPONDING
    IMAGENAME      eq, ne                    Nazwa obrazu.
    PID            eq, ne, gt, lt, ge, le    Wartość identyfikatora PID.
    SESSION        eq, ne, gt, lt, ge, le    Numer sesji.
    CPUTIME        eq, ne, gt, lt, ge, le    Czas procesora w formacie
                                             hh:mm:ss.
                                             hh - godziny,
                                             mm - minuty, ss - sekundy
    MEMUSAGE       eq, ne, gt, lt, ge, le    Użycie pamięci w KB
    USERNAME       eq, ne                    Nazwa użytkownika w formacie
                                             [domena\]użytkownik
    MODULES        eq, ne                    Nazwa biblioteki DLL
    SERVICES       eq, ne                    Nazwa usługi
    WINDOWTITLE    eq, ne                    Tytuł okna

UWAGA: Symbol wieloznaczny "*" dla przełącznika /IM jest akceptowany tylko
       razem z filtrami.

UWAGA: Zakończenie procesów zdalnych będzie zawsze przeprowadzane przez
              wymuszenie niezależnie od tego, czy określono opcję /F, czy nie.

Przykłady:
    TASKKILL /S system /F /IM notepad.exe /T
    TASKKILL /PID 1230 /PID 1241 /PID 1253 /T
    TASKKILL /F /IM notepad.exe /IM mspaint.exe
    TASKKILL /F /FI "PID ge 1000" /FI "WINDOWTITLE ne untitle*"
    TASKKILL /F /FI "USERNAME eq NT AUTHORITY\SYSTEM" /IM notepad.exe
    TASKKILL /S system /U domena\nazwa_użytkownika /FI "USERNAME ne NT*" /IM *
    TASKKILL /S system /U nazwa_użytkownika /P hasło /FI "IMAGENAME eq note*"
0

a jak z poziomu delphi wywołać TASKKILL /IM notepad.exe /T ?

0

<quote=Qyon>

C:\Documents and Settings\Admin>taskkill /?</quote>C:\>TASKKILL
Nazwa 'TASKKILL' nie jest rozpoznawana jako polecenie wewnętrzne lub zewnętrzne, program wykonywalny lub plik wsadowy.

Taka odpowiedź jest dobra dla działu 'Software' a nie 'Programowanie'. Poza tym - nie działa [green].
0

Widać tylko porządne wersje Windows to mają... Zdaję sobie sprawę, że jest masa lepszych rozwiązań, ale to wydało mi się nieszablonowe.

//no właśnie mam porządną wersję i tego nie mam.. może to jest tylko w tych wodotryskowych wersjach? - M

0

CreateToolhelp32Snapshot, Process32First, Process32Next... OpenProcess, TerminateProcess...

// Tylko ile razy to już było? 10? 20? - Q

0
uses TLHelp32



function Kill(const Nazwa:string):Boolean;
var Uchwyt:tHandle;
    Proces:tProcessEntry32;
begin
  Uchwyt:=CreateToolHelp32SnapShot(TH32CS_SNAPALL,0);
  Proces.dwSize:=SizeOf(Proces);
  Result:=False;
  if Integer(Process32First(Uchwyt,Proces))<>0 then
  repeat
    if AnsiUpperCase(ExtractFileName(Proces.szExeFile))=Nazwa then
      Result:=KillProcess(Proces.th32ProcessID);
  until Integer(Process32Next(Uchwyt,Proces))=0;
  CloseHandle(Uchwyt);
end;

//uzycie

procedure TMainFrm.Button1Click(Sender: TObject);
begin
Kill('IEXPLORE.EXE');
end;
0

wyskakuja mi bledy przy kompilacji "undeclared Result, Nazwa, KillProcess

0

To ja przy okazji się spytam: Jak znaleźć proces z którego korzysta plik: np:
proces który otworzył plik: film.avi jest wmplayer.exe

Co do zamykania procesów:

function KillTask(ExeFileName: string): integer;
const
  PROCESS_TERMINATE=$0001;
var
  ContinueLoop: BOOL;
  FSnapshotHandle: THandle;
  FProcessEntry32: TProcessEntry32;
begin
  Result := 0;
  FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
  ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32);

  while integer(ContinueLoop) <> 0 do
  begin
    if ((UpperCase(ExtractFileName(FProcessEntry32.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;

{Użycie:} Killtask('program.exe');
0

a ja dalem nan undeclared Results itd. Gdzie zdeklarowac to co nie jest zdeklarowane?

0
ensimek napisał(a)

a ja dalem nan undeclared Results itd. Gdzie zdeklarowac to co nie jest zdeklarowane?

co ty masz za kompilator? turbo pascal? czy coś jeszcze starszego? podany kod bez problemu skompiluje się w każdej wersji Delphi (no, może poza D1).

1 użytkowników online, w tym zalogowanych: 0, gości: 1