ShellExecute z parametrami

0

Witam,

Używam Command line tools pakietu Xpdf. Wykorzystuję 2 moduły: pdftopng.exe oraz pdfinfo.exe. Oba uruchamiam ShellExecute.

Z uruchamianiem pdftopng.exe nie ma problemu - jedno polecenie i działa konwertowanie PDF na PNG:

ShellExecute(Handle,PChar('open'),PChar(sciezka_do_pliku_PDF+'\pdftopng.exe'),PChar('Plik.pdf PlikPNG'), PChar(sciezka_do_pliku_PDF), SW_HIDE); 

Niestety nie mogę poleceniem ShellExecute uruchomić "bliźniaczego" modułu pdfinfo.exe, a konkretnie nie działają parametry! Bezskutecznie próbowałem wielu konfiguracji poniższego polecenia:

ShellExecute(Handle,PChar('open'),PChar(sciezka_do_pliku_PDF+'\pdfinfo.exe'),PChar('Plik.pdf >info.txtx'), PChar(sciezka_do_pliku_PDF), SW_HIDE); 

Jako "sprawdzenie" wpisuję w wierszu poleceń TotalCommander'a ciąg: pdfinfo.exe Plik.pdf <info.txt i wszystko działa poprawnie - tworzony jest plik info.txt z informacją o PDF. Czyli składnia polecenia uruchamiającego jest poprawna. Bardzo proszę o sugestie jak z użyciem ShellExecute uruchomić ten ciąg poleceń z parametrami pdfinfo.exe Plik.pdf <info.txt ?

2

Od razu to przekierowanie strumienia (<) wydało mi się podejrzane. Więc piszę w google: „Delphi ShellExecute redirect input”. Niebawem znajduję ten wątek: https://stackoverflow.com/que[...]windows-shellexecute-function . Czytamy:

you can use the redirector simbol ">" in a ShellExecute, but using the cmd.exe which is the Windows command interpreter.

try this sample

ShellExecute(0,nil,'cmd.exe','/c MySqlDump.exe -u user1  -ppassword  dbName > TheOutputFile.Sql',nil,sw_normal);

Another options is use pipes, you can find a very nice example in this link(http://www.martinstoeckli.ch/[...]delphi.html#AppRedirectOutput).

Nazwa procedury jest trochę myląca, bo trzeba uruchomić shella, żeby mieć składnię shella. :) W każdym razie wszystko się wyjaśniło. Zastanawia mnie jeszcze czemu przekierowujesz plik do standardowego wejścia, zamiast zwyczajnie wpisać go w parametrach?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0