![]() |
ShellExecute_AndWait
Hi Alle,
wie kann ich einen Prozess, der auf diese Art und Weise gestartet wurde, wieder stoppen. Es handelt sich um den Aufruf ( aus einem Programm heraus ) eines Java Kommandozeilentools. Ich habe die Aufgabe bekommen eine visuelle Oberfläche darum zu bauen! Das Batch File uploadtool etabliert eine Modemverbindung. Ich möchte diese Modemverbindung abbrechen können. Leider hab ich keinen Zugriff auf das Java Teil!
Delphi-Quellcode:
Bitte keine Diskussion darüber ob das sinnvoll ist, ich hab mich auch schon über den
ShellExecute_AndWait('', 'cmd.exe', '/c uploadtool.bat.....
Java "Spinner" aufgeregt. Vielen Dank im Vorraus! |
Re: ShellExecute_AndWait
HI R2009,
da gibt es 3 Möglichlkeiten: a) du hast den Prozessnamen, den du dann beenden kannst b) du hast die ProzessID von dem Prozess, den du beenden willst oder c) du hast ein Fenster, welches geschlossen werden soll. Ich geh mal davon aus, dass das zu beendende Programm kein JAVA-Programm ist. für a)
Delphi-Quellcode:
für b)
procedure Killprocess(Name:String);
var PEHandle,hproc:cardinal; PE:ProcessEntry32; begin PEHandle:=CreateTOOLHelp32Snapshot(TH32cs_Snapprocess,0); if PEHandle<>Invalid_Handle_Value then begin PE.dwSize:=Sizeof(ProcessEntry32); Process32first(PEHandle,PE); repeat if Lowercase(PE.szExeFile)=Lowercase(Pchar(Name)) then begin hproc:=openprocess(Process_Terminate,false,pe.th32ProcessID); TerminateProcess(hproc,0); closehandle(hproc); break; end; until Process32next(PEHandle,PE)=false; end; closehandle(PEHandle); end;
Delphi-Quellcode:
für c)
procedure TerminateProcess(PID: DWORD);
var hproc:cardinal; begin hproc:=openprocess(Process_Terminate,false,pe.th32ProcessID); TerminateProcess(hproc,0); closehandle(hproc); end;
Delphi-Quellcode:
Hoffe mal, dass da das entsprechend richtige dabei ist.
procedure CloseWindow(wnd: HWND);
begin SendMessage(wnd, WM_CLOSE, 0, 0); end; Bernhard |
Re: ShellExecute_AndWait
Hi,
du liegst falsch! Es ist eine Java Programm aufgerufen durch den Batch! (Hab selten so einen Murks gesehen. Ist aber so) Hab versucht die cmd.exe (ich kenne momentan nur den Namen des Prozesses) abzuschiessen! Lässt sich aber nicht schliessen. Viele Grüsse |
Re: ShellExecute_AndWait
Zitat:
Alternativ (oder zusätzlich) käme in Frage, die vom Java-Prozess geöffnete DFÜ-Verbindung über Delphi zu schliessen. Cheers, |
Re: ShellExecute_AndWait
Hi,
danke dir du hast mich auf die richtige Spur gebracht. Hatte zuerst versucht cmd.exe zu stoppen.
Delphi-Quellcode:
Aufgerufen mit:
procedure Killprocess(Name:String);
var PEHandle,hproc:cardinal; PE:ProcessEntry32; begin PEHandle:=CreateTOOLHelp32Snapshot(TH32cs_Snapprocess,0); if PEHandle<>Invalid_Handle_Value then begin PE.dwSize:=Sizeof(ProcessEntry32); Process32first(PEHandle,PE); repeat if Lowercase(PE.szExeFile)=Lowercase(Pchar(Name)) then begin hproc:=openprocess(Process_Terminate,false,pe.th32ProcessID); TerminateProcess(hproc,0); closehandle(hproc); break; end; until Process32next(PEHandle,PE)=false; end; closehandle(PEHandle); end;
Delphi-Quellcode:
Ist mir bewusst das das nicht schön ist. Aber dass Java eventuell 2 mal offen ist lässt sich beherschen.
procedure Tmain.Button9Click(Sender: TObject);
begin Killprocess('java.exe'); se2.Lines.Add('Anwahl gestoppt!'); end; Das Programm wird nur von unseren Profis benutzt! Vielen Dank. Ihr habt mir sehr geholfen! |
Re: ShellExecute_AndWait
Zitat:
Also: Zitat:
Bernhard |
Re: ShellExecute_AndWait
Hi Rollstuhlfahrer,
das Problem ist gelöst. (siehe mein Beitrag) Vom meinem Programm aus wurde ein Prozess cmd --> uploadtool --> java (Fremdkram) gestartet). Völlig Fensterlos. Die oben (Killprocess) genannte Methode funktioniert wenn der java Prozess abgeschossen wird. Viele Grüsse! |
Re: ShellExecute_AndWait
Zitat:
|
Re: ShellExecute_AndWait
Zitat:
Man kann in Delphi auch einen Java-Prozess direkt starten und kontrolliert beenden, wenn java.exe direkt - anstatt über CMD und das Batch - gestartet wird. Das geht aber nur, wenn die sonstigen Startparameter bekannt sind, die an java.exe übergeben werden. Falls die Parameter sich aber ändern (und man sie in Delphi nicht ermitteln kann), ist die Lösung mit KillProcess ohne Frage nicht die schlechteste. |
Re: ShellExecute_AndWait
Zitat:
Delphi-Quellcode:
raus ;)
{$APPTYPE CONSOLE}
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:36 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz