Jak zamknac program
wesoledi
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}
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
a zgaszę tym firewalla???
wow moj kodzik powiadasz :)
tak tylko jak tym close zamkniesz inny program?
Ja wybieram jednak close;
Można użyć
close;
albo
Aplication.Terminate;
tak jest prościej
buhahaha! gratuluje pomysłu :D
A za tydzień - jak nacisnąc button w 10 rozdzialach :D
jak można tak prosto to po co ten długi kod ?? Jest kilka prostrzych sposobó na uzyskanie tego samego efektu....
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.
[quote]mozna tez prosciej:
...[/quote]
no to poco ten 5x dłuższy sposób ? :/
i temat bezsensowny.. "jak zamknac program" jaki gdzie jak czym?
Brak polskich liter!! W artukułach przestrzegamy tego!
Brak ładnego formatowania kodu - wcięcia i tag <delphi>