Avatar billede pigbear Nybegynder
28. oktober 2002 - 15:17 Der er 4 kommentarer

Afslutte kørende program

Hej
Er der nogen der ved hvordan man fra delphi kan afslutte et hvilket som helst program der kører på samme pc som selve delphi programmet !

Egentlig er det Joblisten som jeg vil have adgang til og evt. kunne vælge et program i listen og derefter afslutte det hårdt og brutalt. Hvis fx dialer programmet kører, så vil jeg gerne finde dialer i joblisten, og affyre en terminate funktion og derved afslutte programmet !

Mvh

Pigbear
Avatar billede megabyte_ Nybegynder
28. oktober 2002 - 15:24 #1
Hey Pigbear

Her er noget du nok kan bruge.

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_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;

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;

/MB
Avatar billede diz Nybegynder
28. oktober 2002 - 15:28 #2
ellers kan du også kigge lidt her.

http://www.eksperten.dk/spm/214601

Det er hvordan du finde alle åbne programmer...
Avatar billede megabyte_ Nybegynder
28. oktober 2002 - 15:54 #3
Hov kan se jeg glemte at lave det som et svar :) så gør det lige nu.

/MB
Avatar billede diz Nybegynder
28. oktober 2002 - 15:55 #4
her er en løsning til at få alle kørende programmer i en listbox og derefter når der klikkes på det, så lukkes det.

http://www.eksperten.dk/spm/73495
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester