Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi ShellExecuteEx Programm starten und beenden (https://www.delphipraxis.net/147934-shellexecuteex-programm-starten-und-beenden.html)

Andidreas 19. Feb 2010 10:17


ShellExecuteEx Programm starten und beenden
 
hallo zusammen...

ich würde gerne mit ShellExecuteEx ein programm starten und wieder schließen...
dazu hab ich den folgenden beitrag gefunden: Link

das programm starte ich über einen button wo ich dne folgenden source hinterlegt habe:

Delphi-Quellcode:
ShExecInfo.cbSize := sizeof(SHELLEXECUTEINFO);
  ShExecInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
  ShExecInfo.lpVerb := 'open';
  ShExecInfo.lpFile := PChar(edit8.text);
  ShExecInfo.lpDirectory := PChar(edit7.text);
  ShExecInfo.lpParameters := nil;
  ShExecInfo.nShow := SW_SHOWNORMAL;

  ShellExecuteEx(@ShExecInfo);
ShExecInfo ist eine Globale Variable in meinem programm...

über einen weitern button möchte ich jetzt das programm schließen

Delphi-Quellcode:
CloseHandle(ShExecInfo.hProcess);
bloß leider klappt das schließen nicht... kann mir einer verraten warum?

DeddyH 19. Feb 2010 10:48

Re: ShellExecuteEx Programm starten und beenden
 
Was mir spontan einfällt (unter Berücksichtigung Deines anderen Threads): Du hast ja das Prozesshandle. Nun könntest Du mit EnumWindows alle Fenster durchgehen, mit GetWindowThreadProcessId auf Dein Prozesshandle prüfen und bei Übereinstimmung ein WM_CLOSE an das Fenster senden.

Astat 19. Feb 2010 10:56

Re: ShellExecuteEx Programm starten und beenden
 
Zitat:

Zitat von Andidreas
..bloß leider klappt das schließen nicht... kann mir einer verraten warum?

Hallo Andidreas, du schließt das Prozesshandle, aber nicht den Prozess.

Delphi-Quellcode:
TerminateProcess(ShExecInfo.hProcess, 0);
CloseHandle(ShExecInfo.hProcess);
So, nu isa weg!

lg. Astat

DeddyH 19. Feb 2010 11:19

Re: ShellExecuteEx Programm starten und beenden
 
TerminateProcess will er ja nicht ;)

Astat 19. Feb 2010 11:58

Re: ShellExecuteEx Programm starten und beenden
 
Hallo DeddyH, ahh, also ein "Cross Poster" :idea:

Delphi-Quellcode:
PostMessage(ShExecInfo.Wnd, WM_CLOSE, 0,0);
lg. Astat :cheers:

Andidreas 22. Feb 2010 07:38

Re: ShellExecuteEx Programm starten und beenden
 
ja ich geb zu es war ein "cross post"

der kam aber auch nur zustande weil ich nach ner weiteren alternative gesucht habe ein 2. programm sauber zu beenden (ausser über sendmessage oder postmessage)... und das angeführte bsp. aus meinem ersten beitrag hatte ich falsch interpretiert... ich dachte das man über den handle vom shellexecuteex das programm auch sauber schließen kann... aber nachdem ich mir das beispiel zum 10. mal durchgelesen habe und ausprobiert habe ist mir aufgefallen das dat doch nich das macht was ich will...


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz