Programowanie w języku Delphi » FAQ

Jak zamknac program

Trzeba znac uchwyt glownego okienka programu, a najlepiej cale info o procesie programu, tutaj pokazalem jak uruchomic program pod delphi i jak go zamknac.

Do listy uses dodaj nastepujaca wartosc: Registry

Potem wklej nastepujace zmienne i funkcje:

var
   aProcessInfo: PROCESS_INFORMATION;
   aProcessSecAttr: SECURITY_ATTRIBUTES;
   aThreadSecAttr: SECURITY_ATTRIBUTES;
   aStartupInfo: STARTUPINFO;
   hProcessHandle:HWND;
 
function RunApp(commandLine: string): integer;
var
   n: Boolean;
begin
   with aProcessSecAttr do
   begin
      bInheritHandle := False;
      lpSecurityDescriptor := nil;
      nLength := sizeOf(aProcessSecAttr);
   end;
 
   with aThreadSecAttr do
   begin
      bInheritHandle := False;
      lpSecurityDescriptor := nil;
      nLength := sizeOf(aThreadSecAttr);
   end;
 
   with aStartupInfo do
   begin
      cb := sizeOf(aStartupInfo);
      lpReserved := nil;
      lpDesktop := nil;
      lpTitle := nil;
      dwX := 0;
      dwY := 0;
      dwXSize := 300;
      dwYSize := 300;
      dwXCountChars := 80;
      dwYCountChars := 25;
      dwFillAttribute := 0;
      dwFlags := STARTF_USESTDHANDLES;
      wShowWindow := SW_SHOWDEFAULT;
      cbReserved2 := 0;
      lpReserved2 := nil;
      hStdInput := 0;
      hStdError := 0;
      hStdOutput := 0;
   end;
 
   n := CreateProcess(nil, @commandLine[1], nil, nil,
                              True, CREATE_NO_WINDOW + NORMAL_PRIORITY_CLASS,
                              nil, nil, aStartupInfo, aProcessInfo);
 
   if n then
      RunApp := aProcessInfo.hProcess
   else
      RunApp := -1;
end;
 
procedure CloseProcessHandles;
begin
   terminateprocess(aProcessInfo.hThread,0);
   terminateprocess(aProcessInfo.hProcess,0);
   CloseHandle(aProcessInfo.hThread);
   CloseHandle(aProcessInfo.hProcess);
end;
 
Oto przyklad ich uzycia.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
   hProcessHandle := RunApp(extractfilepath(application.exename)+'notepad.exe');
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
   CloseProcessHandles;
end; 
 
 
mozna tez prosciej:
var
   H:Thandle
begin
   H:=FindWindow(nil,'Caption Okna do zamknięcia');
   PostMessage(H,WM_QUIT,0,0);
end;
{kodzik od Endrju}

12 komentarzy

drazilla 2006-05-17 22:58

heh :D brak mi słów... to tak też sie da?  hehe, jednak tak samo jak przedmówcy - zostanę przy starym dobrym close; :D

do majstra johans2:
yyy... ee... pokombinuj człowieku, poszukaj coś w stylu "zakańczanie procesów".. :/ kurcze delphi na psy schodzi... jak chcesz to napisze ci arta jak pokazać komunikat :D

johans2 2005-01-12 01:44

a zgaszę tym firewalla???

Endrju 2004-11-12 11:51

wow moj kodzik powiadasz :)

tak tylko jak tym close zamkniesz inny program?

maciekwielki 2004-07-14 22:22

Ja wybieram jednak close;

iYYa24 2004-05-21 13:17

Można użyć
close;
albo
Aplication.Terminate;
tak jest prościej

MartrixMan 2003-11-10 20:33

buhahaha! gratuluje pomysłu :D

Greenek 2003-10-23 22:07

A za tydzień - jak nacisnąc button w 10 rozdzialach :D

Waldi__17 2003-10-23 19:06

jak można tak prosto to po co ten długi kod ?? Jest kilka prostrzych sposobó na uzyskanie tego samego efektu....

Adam Boduch 2003-10-23 14:57

Na przyszłość stosuj polskie litery, komentarze, znaczki formatowania kodu, opisuj dokładniej temat wskazówki. Przeczytaj najelepiej: [url]http://4programmers.net/coyote/coyote.html#10[/url]

Tam jest napisane wszystko, co powinieneś wiedzieć na temat dodawania artykułów w serwisie.

Japcok 2003-10-23 13:49

[quote]mozna tez prosciej:
...[/quote]
no to poco ten 5x dłuższy sposób ? :/

lofix 2003-10-23 12:15

i temat bezsensowny.. "jak zamknac program" jaki gdzie jak czym?

Marooned 2003-10-23 01:54

Brak polskich liter!! W artukułach przestrzegamy tego!

Brak ładnego formatowania kodu - wcięcia i tag <delphi>