![]() |
shellexecute mit pipes im command
hallo ich habe nen kleines problem,
ich würde gerne ein programm erstellen was mir folgendes shellcommando ausführt \python25\python.exe \temp\mplayer\camproxy.py "http://xxx.dyndns.org:82/axis-cgi/mjpg/video.cgi?resolution=320x240&compression=15&des_fp s=2" 2 | \temp\mplayer\mencoder -demuxer rawvideo -rawvideo w=320:h=240:format=rgb24:fps=2 -nosound -ffourcc FLV1 -of lavf -ovc lavc -lavcopts vcodec=flv:vbitrate=300:keyint=10 -lavfopts i_certify_that_my_video_stream_does_not_use_b_fram es -o \Programme\xampp\htdocs\customervid\flv\abc.flv -really-quiet - | \cygwin\bin\tail.exe -f \Programme\xampp\htdocs\customervid\flv\abc.flv da ich ja hier mehrer pipes drin habe was ne datenübergabe zum nächsten programm macht geht das ja mit shell execute nicht so einfach, wie muss ich vorgehen ? bin für jegliche hilfe dankbar. mfg enrico hofmann |
Re: shellexecute mit pipes im command
Herzlich willkommen in der Delphi-PRAXiS, Enrico.
Da die Behandlung von pipes und redirection eine Funktionalität der Shell ist, musst du beim Aufruf entweder die Shell aufrufen oder alles in einen Befehlsstapel verpacken. Freundliche Grüße vom marabu |
Re: shellexecute mit pipes im command
Hallo :hi:
Versuchs mal so:
Delphi-Quellcode:
Pipes sind IMHO n Feature von der cmd...
Shellexecute(..., 'cmd /C sonstwas | eigabe'...);
//Roter Kasten: Marabu hats eigentlich schon gesagt. Trotzdem hier nochmal mit Code... mfg Christian |
Re: shellexecute mit pipes im command
hallo danke,
erstmal danke, daraus entseht nur folgendes problem. die commando übergabe darf nur 255 zeichen lang sein. [Pascal Error] vrecord.pas(38): E2056 String literals may have at most 255 elements was kann ich denn da machen ? mfg enrico |
Re: shellexecute mit pipes im command
Batchdatei erstellen und die ausführen...
mfg Christian |
Re: shellexecute mit pipes im command
hi ok das funktioniert,
aber ich habe trotzdem noch das gleiche problem, die batch beendet sich nicht wenn ich das programm schliesse :( wie mus ich da vorgehen ? irgend eine idee, das dosfenster bleibt halt offen und läuft weiter wenn ich das delphi programm beende |
Re: shellexecute mit pipes im command
In OnClose das Dos-Fenster abschießen?
mfg Christian |
Re: shellexecute mit pipes im command
wie kann ich denn das dos fenster ansprechen ?
mfg enrico |
Re: shellexecute mit pipes im command
IMHO: Über CreateProcess erstellen. Dann erhälst du n Handle zurück. Mit dem dann den Prozess killen. Da gibts mit Sicherheit was in der Codelib, etc.
mfg Christian |
Re: shellexecute mit pipes im command
sorry wenn ich nochmal nerfe, kann zwar nen bissel delphi bin aber eigentlich webentwickler.
wie muss das konkret bei eine consolen applikation aussehen ? |
Re: shellexecute mit pipes im command
Willst du jetzt n Konsolenprog schreiben oder eins starten?
ersteres geht ganz einfach: Deitei-->Neu-->Andere-->Konsolenanwendung (oder so ähnlich...) letzteres: CreateProcess nehmen(Verwendung bitte selbst im PSDK nachgucken). Diese Funktion gibt IMHO n Handle zurück. Dieses Handle übergibtst du ner Funktion KillProcess. N Codeschnipsel dafür müsstest du leicht finden können... mfg Christian |
Re: shellexecute mit pipes im command
Hallo Enrico,
Zitat:
Grüße vom marabu |
Re: shellexecute mit pipes im command
Moin Enrico,
dem Problem mit der limitierten Länge von Stringliteralen kannst Du auch durch + begegnen: 'max. 255 Zeichen' + 'max. 255 Zeichen' + ... |
Re: shellexecute mit pipes im command
hi, so also ich habe das jetzt folgendes
Delphi-Quellcode:
nur das beenden klappt nicht wirklich, der prozess läuft weiter :(
var
Form2: TForm2; ProcessInfo: TProcessInformation; StartupInfo: TStartupInfo; implementation {$R *.dfm} procedure TForm2.Button1Click(Sender: TObject); begin FillChar(StartupInfo, SizeOf(TStartupInfo),0); StartupInfo.cb := SizeOf(TStartupInfo); StartupInfo.dwFlags := STARTF_USESHOWWINDOW; StartupInfo.wShowWindow := SW_HIDE; if CreateProcess( nil, PChar(Edit1.Text), nil, nil, False, NORMAL_PRIORITY_CLASS, nil, PChar('C:\'), StartupInfo, ProcessInfo) then begin Showmessage('Prossess gestartet'); End else ShowMessage('Fehler'); end; procedure TForm2.Button2Click(Sender: TObject); begin CloseHandle(ProcessInfo.hProcess); end; |
Re: shellexecute mit pipes im command
Nimm nicht CloseHandle, sondern
![]() Is nur schnell rausgesucht. Nicht weiter mit beschäftigt... Hab das aber auch noch nie gemacht... Korrigiert mich also, wenn ich Blödsinn geredet hab... mfg Christian |
Re: shellexecute mit pipes im command
Moin Enrico,
Du musst dabei allerdings berücksichtigen, dass Du mit TerminateProcess den Prozess nicht sauber beendest, sondern abschiesst. |
Re: shellexecute mit pipes im command
Zitat:
mfg Christian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:33 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