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 TerminateProcess.
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 04:16 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